我正在使用Rails 5.我在编写正则表达式时遇到问题。我想编写一个表达式,它将解析一个字符串,查找一个正数,然后是数字后面的第一个单词,无论数字和下一个单词之间是否有空格或其他类型的单词边界。所以我试过
2.4.0 :006 > str = "2g"
=> "2g"
2.4.0 :007 > str.match(/\W?(([0-9]+(\.[0-9]+)?)\W*(^[0-9:\/]+))/)
=> nil
但是你可以看到没有匹配发生。我希望这场比赛能够获得“2”,然后是“g”。同样,如果我有一个像
这样的字符串2.4.0 :008 > str = "12.2 word next"
=> "12.2 word next"
2.4.0 :009 > str.match(/\W?(([0-9]+(\.[0-9]+)?)\W*(^[0-9:\/]+))/)
=> nil
我希望正则表达式捕获“12.2”,然后是下一个单词“word”。但正如你可以看到我的正则表达式并没有削减它。如何修复它以捕获我需要的东西?
答案 0 :(得分:0)
这应该有效。
([0-9.]+)\s(\w+)
输入:
12.2 word
输出:
12.2
word
Ruby代码:
re = /([0-9.]+)\s(\w+)/
str = '12.2 word'
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
答案 1 :(得分:0)
您是否尝试在“12.2 word next”中选择“12.2word”或“12.2 word”?
正如你在评论中回答的那样,在group1中有浮点数,在group2中有单词:
(\d+\.\d+|\d+)[^a-zA-Z0-9]*([a-zA-Z]+)
Full match 6-15 `12.2 good`
Group 1. 6-10 `12.2`
Group 2. 11-15 `good`
<小时/> 我的第一个答案是:
(\d+(\.\d{0,})?)[^a-zA-Z0-9]*([a-zA-Z]+)
for " 12.2 good "
Full match 6-15 `12.2 good`
Group 1. 6-10 `12.2`
Group 2. 8-10 `.2`
Group 3. 11-15 `good`
在此示例中,Group1是您的整数部分,Group2为null或等于.2。