我正在为以下短语变体编写正则表达式:
我抓住了两件事:"更大"或者"较少"和金额。我想知道是否有一个美元符号,但是这就是绊倒我。
这是我的正则表达式:
/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/
这:
"cart total is greater than $5.00".match(/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/)
让我更好"和5.00但是这个:
"cart total is greater than 5.00".match(/^.*(?=cart total).*(?=(greater|less)).*(?=\$([0-9.]+))/)
让我"更大"和""
我意识到前瞻是专门搜索" $"在小组中,所以取出它导致它没有找到金额,但我喜欢看到如何修改这个以找到金额,无论是否存在" $"或不。
谢谢!
答案 0 :(得分:5)
在这种情况下,对我来说前瞻是不必要的。我删除了那些。并为可选的美元符号添加\$?
。
^.*?cart total.*?(greater|less).*?\$?([0-9.]+)
答案 1 :(得分:3)
在这种情况下,前瞻不是必需的。我略微改善了您的美元匹配,以匹配数字中的逗号,例如$1,000.00
,并且没有任何逗号/小数点,例如$10
。
regex = /cart total is (greater|less) than \$?((?:\d+,?)+(?:.\d+)?)/
strings = [
"cart total is greater than 5.00",
"cart total is less than $1,500,000.00",
"cart total is greater than $5"
]
strings.each do |string|
p string.match(regex)
end
#<MatchData "cart total is greater than 5.00" 1:"greater" 2:"5.00">
#<MatchData "cart total is less than $1,500,000.00" 1:"less" 2:"1,500,000.00">
#<MatchData "cart total is greater than $5" 1:"greater" 2:"5">
答案 2 :(得分:1)
您可以使用optional quantifier ?
对原始正则表达式的一个小修改 -
^.*(?=cart total).*(?=(greater|less)).*(?=\$?([0-9.]+))
^ Added ?
演示here