我想在以下字符串中提取"@"
和":"
之间以及":"
之后的值:
str =
"this is some text
Text@7789347: 4444
some text
text @ 7789348 : 666,555
some text
"
输出:
"7789347", " 4444"
"7789348", " 666,555"
我正在使用以下正则表达式:
(\s)*[t|T][e|E][x|X][t|T](\s)*@(\s)*(\d)*(\s)*:.*
我可以选择必填字段,但我不知道如何获取值。
答案 0 :(得分:1)
你可以scan
这样:
str.each_line{ |line|
a = line.scan(/@(.*):(.*)$/)
puts a[0].inspect if !a.empty?
}
# ["7789347", " 4444"]
# [" 7789348 ", " 666,555"]
答案 1 :(得分:1)
要获取您可以使用的值:@\s*(.*?)\s*:\s*(\d+(?:,\d+)*)
if line =~ /@\s*(.*?)\s*:\s*(\d+(?:,\d+)*)/
match1 = $~[1]
match2 = $~[2]
else
match = ""
end
答案 2 :(得分:1)
Regex可能会帮助您:
Key Value
FirstName John
Amount 2.4
PostalCode ZH1E4A
LastName Fork
AccountNumber 857685
答案 3 :(得分:1)
如果您只需匹配浮动数字,则可以使用/(?mi)^\s*\btext\b.*?@\s*(\d+(?:,\d+)?)\s*:\s*(\d+(?:,\d+)?)$/
正则表达式:
str="""this is some text
Text@7789347: 4444
some text
text @ 7789348 : 666,555
some text
"""
puts str.scan(/(?mi)^\s*\btext\b.*?@\s*(\d+(?:,\d+)?)\s*:\s*(\d+(?:,\d+)?)$/)
the demo的输出:
7789347
4444
7789348
666,555