提取字符串匹配正则表达式

时间:2015-05-20 12:38:02

标签: ruby regex

我想在以下字符串中提取"@"":"之间以及":"之后的值:

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)*:.*

我可以选择必填字段,但我不知道如何获取值。

4 个答案:

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

DEMO

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