我有一个字符串:
"0011HelloWor00ld001"
如何计算字符串开头的零数? 例如,上面的字符串应该返回2.
我试过了.match(/^[0]+/).size
,但它没有用。
答案 0 :(得分:5)
.match(/^0+/)
将返回一个MatchData对象,因此得到1
作为结果(它表示匹配数组中的元素数)。
您需要获得匹配本身的大小。使用以下之一:
"0011HelloWor00ld001".match(/^0+/)[0].size
"0011HelloWor00ld001"[/^0+/].size
"0011HelloWor00ld001".match(/^0+/).to_s.size
答案 1 :(得分:4)
你也可以简单地使用String的index
方法,如
str = '0011HelloWor00ld001'
# as noted by @steenslag if the full string is zeros index will return nil
# solve by returning full string length
str.index(/[^0]/) || str.length
#=> 2
答案 2 :(得分:1)
我最喜欢@ Wiktor的中间答案,但这里还有三个。
<强>#1 强>
def nbr_leading_zeros(str)
str.split(/[^0]/).first.size
end
nbr_leading_zeros '0011Hello00' #=> 2
nbr_leading_zeros '101' #=> 0
nbr_leading_zeros '000' #=> 3
<强>#2 强>
def nbr_leading_zeros(str)
str.each_char.take_while { |c| c=='0' }.size
end
<强>#3 强>
def nbr_leading_zeros(str)
str.match(/\A0*/)&.end(0).to_i
end