繁体   English   中英

正则表达式用于将字符串与红宝石中的数字匹配

[英]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

rubular demo

您只需要\\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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM