我想提取某些字符串的开头编号和结束编号。
以下是测试用例。
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
但上面的代码只能打印匹配字符串。
答案 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)
是一个正面预测,需要三个零后跟一个数字1
到9
或最后跟0
字符串。