[英]regex for matching a string with a number in ruby
我有一个字符串如下。
"Included in PTA fees" or "Included in PTA fees 33$" or "Included in PTA fees $60"
我需要将此字符串与搜索PTA费用相匹配,并且是否还要附加任何费用(数字)。
需要在任何给定的字符串中查找“ PTA费用”以及费用值,然后返回true。
所以它应该返回true
"Included in PTA fees 33$" and
"Included in PTA fees $60"
对于"Included in PTA fees"
,应返回false
我尝试使用下面的正则表达式。 但它返回true
"Included in PTA fees"
/#{PTA_FEE[0-9]}/i.match?(value)
这个正则表达式应该工作
^.*PTA fees?(?=.*(?:(?:\d+\s*\$)|(?:\$\s*\d+)))
正则表达式分解
(?i) #Ignore Case
^ #Start of string
.*
PTA fees? #Match the string with fee(s)
(?=.* #Lookahead
(?: #Non capturing group
(?:\d+\s*\$) #Match digit followed by $
| #Alternation
(?:\$\s*\d+) #Match $ followed digit
) #End non capturing group
) #End lookahead
您只需要\\S+
作为正则表达式的结尾部分:
str =~ /Included in PTA fees? \S+/
\\S+
一个或多个非空白字符 ?
选配 或者更确切地说:
str =~ /Included in PTA fees? (?:\d+\$|\$\d+)/
我会选择Included in PTA fees(?=.*?(\\d+(?:\\.\\d+)?))
; 这也将费用分组并考虑浮点值。 但是它没有考虑任何自由形式的否定,例如“ 不包含在PTA费用中”或“ 不包含在PTA费用中”。
它无视美元符号; 由于您的描述不完整,并且您要匹配的内容看起来可能在语法上不正确,因此美元符号可能有\\$\\s*\\d+|\\d+\\s*\\$
。 美元价值可能有千位分隔符吗?
如果未明确说明问题,则可以使该问题的答案复杂得多。
您可以使用以下一种:
^Included in PTA fees\s*(\$\d+|\d+\$)
它检查字符串是否Included in PTA fees
开头,然后允许费用编号在( \\$\\d+
)之前或之后( \\d+\\$
)加上美元符号
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.