Ruby正则表达式提取数字

时间:2018-04-20 17:47:14

标签: ruby regex

我想提取某些字符串的开头编号和结束编号。

以下是测试用例。

 10000 => 1-0
100000 => 10-0
310000 => 31-0
310001 => 31-1
1200000 => 120-0
1200009 => 120-9
12000011 => 120-11

正如您所看到的,在最终数字之前总是有三个零。 但我不知道如何提取这两个数字。

我已尝试过以下内容。

re = /[\d]+[0]{3}[\d]+/
str = '10000'

# Print the match result
str.scan(re) do |match|
    puts match.to_s
end

但上面的代码只能打印匹配字符串。

2 个答案:

答案 0 :(得分:1)

请按照以下代码进行操作。希望这会有所帮助。

regex_pattern = /(\d+)(0{3})(\d+)/

# For all numbers
numbers = ['10000', '100000', '310000', '310001', '1200000', '1200009', '12000011']
result = numbers.map do |number|
  #Every group captured can be use here with $number like for group 1 use $1. For group 2 use $2.
  number.gsub(regex_pattern) { |match_object| "#{$1}-#{$3}" }
end
p result

#For individual number
number = '10000'
p number.gsub(regex_pattern) { |match_object| "#{$1}-#{$3}" }

如果这有助于您或您有任何其他疑问,请告诉我。

答案 1 :(得分:0)

test =<<_
10000
100000
310000
310001
1200000
1200009
12000011
_

r = /000(?=[1-9]|0\z)/

test.lines.each { |s| puts s.chomp.gsub(r,'-') }  
1-0
10-0
31-0
31-1
120-0
120-9
120-11  

(?=[1-9]|0\z)是一个正面预测,需要三个零后跟一个数字19或最后跟0字符串。