我有一个字符串如下。
"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"
我尝试使用下面的正则表达式。但是对于
,它返回true"Included in PTA fees"
/#{PTA_FEE[0-9]}/i.match?(value)
答案 0 :(得分:2)
这个正则表达式应该可行
^.*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
答案 1 :(得分:2)
您只需要\S+
作为正则表达式的结尾部分:
str =~ /Included in PTA fees? \S+/
\S+
一个或多个非空白字符?
可选匹配或更确切地说:
str =~ /Included in PTA fees? (?:\d+\$|\$\d+)/
答案 2 :(得分:1)
我会去Included in PTA fees(?=.*?(\d+(?:\.\d+)?))
;这也将费用分组并考虑浮点值。但它没有考虑任何自由形式的否定,例如“不包含在PTA费用中”或“不包含在PTA费用中”。
它无视美元符号;由于您的描述不完整,并且您所匹配的内容看起来像可能在语法上不正确的内容,因此美元符号可能会\$\s*\d+|\d+\s*\$
。美元价值可能有一千个分隔符吗?
当问题未明确时,您可以将这个问题的答案复杂化。
答案 3 :(得分:1)
你可以使用这个:
^Included in PTA fees\s*(\$\d+|\d+\$)
检查字符串是否以Included in PTA fees
开头,然后允许在(\$\d+
)之前或之后带有美元符号的费用号码(\d+\$
)