如何计算字符串开头的零数

时间:2017-03-29 15:21:55

标签: ruby regex

我有一个字符串:

"0011HelloWor00ld001"

如何计算字符串开头的零数? 例如,上面的字符串应该返回2.

我试过了.match(/^[0]+/).size,但它没有用。

3 个答案:

答案 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