我想提取两个 1 之间的所有 0 并将它们从二进制数中分组。到目前为止,我已经做到了,
529.to_s(2).scan(/1(0+)1/)
输出是只有一个元素的数组,虽然我想要两个元素。那是
529 => binary => 1000010001
["0000","000"]
529.to_s(2).scan(/(?<=1)0+(?=1)/)
# => ["0000", "000"]
这怎么样 ?
a = 529.to_s(2).split("1")
a.delete("")
a # => ["0000", "000"]
两个 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。它不包含任何一个,你得到零。