1

我想提取两个 1 之间的所有 0 并将它们从二进制数中分组。到目前为止,我已经做到了,

529.to_s(2).scan(/1(0+)1/)

输出是只有一个元素的数组,虽然我想要两个元素。那是

529 => binary => 1000010001

["0000","000"]
4

3 回答 3

2
529.to_s(2).scan(/(?<=1)0+(?=1)/)
# => ["0000", "000"]
于 2013-09-08T11:57:06.247 回答
0

这怎么样 ?

a = 529.to_s(2).split("1")
a.delete("")
a # => ["0000", "000"]
于 2013-09-08T11:55:30.620 回答
0

两个 1 和组之间的全 0

所以我认为你不想要像 10、100、111000、1000 等这样的匹配。最简单的方法是从开始和结束找到第一个的左右索引,然后开始只寻找零。

这是一种方法。

bin=8.to_s(2) #=> 1000
bin[bin.index('1')..bin.rindex('1')].scan /0+/
#=> []

bin=529.to_s(2) #=> 1000
bin[bin.index('1')..bin.rindex('1')].scan /0+/
#=> ["0000", "000"]

小心0。它不包含任何一个,你得到零。

于 2013-09-08T12:24:35.187 回答