用于在ruby中将字符串与数字匹配的正则表达式
我有一个字符串如下用于在ruby中将字符串与数字匹配的正则表达式,ruby,regex,Ruby,Regex,我有一个字符串如下 "Included in PTA fees" or "Included in PTA fees 33$" or "Included in PTA fees $60" 我需要将此字符串与搜索PTA费用/费用以及是否附加了任何feenumber匹配 需要查找PTA费用以及任何给定字符串中的费用值,并返回true 因此,它应该返回真的 "Included in PTA fees 33$" and "Included in PTA fees $60" "Included in P
"Included in PTA fees" or "Included in PTA fees 33$" or "Included in PTA fees $60"
我需要将此字符串与搜索PTA费用/费用以及是否附加了任何feenumber匹配
需要查找PTA费用以及任何给定字符串中的费用值,并返回true
因此,它应该返回真的
"Included in PTA fees 33$" and
"Included in PTA fees $60"
"Included in PTA fees"
/#{PTA_FEE[0-9]}/i.match?(value)
如果包含在PTA费用中,则应返回false
我尝试使用下面的正则表达式。但这对我来说是真的
"Included in PTA fees 33$" and
"Included in PTA fees $60"
"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
这个正则表达式应该有效
^.*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
我会和你一起去;这也会对费用进行分组,并考虑浮点值。但它没有考虑任何自由形式的否定,例如不包括在PTA费用中或不包括在PTA费用中
它忽略了美元符号;由于您的描述不完整,并且您所匹配的内容看起来可能在语法上不正确,因此您可能会使用\$\s*\d+\d+\s*\$作为美元符号。美元价值可能有一千个分隔符吗
当这个问题没有明确说明时,你可能会使这个问题的答案变得相当复杂。我同意;这也会对费用进行分组,并考虑浮点值。但它没有考虑任何自由形式的否定,例如不包括在PTA费用中或不包括在PTA费用中
它忽略了美元符号;由于您的描述不完整,并且您所匹配的内容看起来可能在语法上不正确,因此您可能会使用\$\s*\d+\d+\s*\$作为美元符号。美元价值可能有一千个分隔符吗
当问题未被指定时,您可能会使该问题的答案变得相当复杂。您可以使用以下选项:
^Included in PTA fees\s*(\$\d+|\d+\$)
它检查字符串是否以“包含在PTA费用中”开头,然后允许在\$\d+之前或之后使用带美元符号的费用编号+\$
您可以使用这个:
^Included in PTA fees\s*(\$\d+|\d+\$)
它检查字符串是否以“包含在PTA费用中”开头,然后允许在\$\d+之前或之后使用带美元符号的费用编号+\$
您只需要\S+作为正则表达式的结束部分:
str =~ /Included in PTA fees? \S+/
\S+一个或多个非空白字符
? 选配
或者更准确地说:
str =~ /Included in PTA fees? (?:\d+\$|\$\d+)/
您只需要\S+作为正则表达式的结束部分:
str =~ /Included in PTA fees? \S+/
\S+一个或多个非空白字符
? 选配
或者更准确地说:
str =~ /Included in PTA fees? (?:\d+\$|\$\d+)/
像@rock321987一样,它与其他费用不匹配,包括在PTA费用中33美元??所以我认为我们可以省略^.*它将匹配。。您可以检查@rubyst:您的反例杂项费用是。。。不是您原始描述的一部分。@rock321987/^.*{PTA_FEE}?=.\d+/.match?值不匹配包含在PTA费用中12$值包含在PTA费用中12$类似于@rock321987它不会匹配其他费用包含在PTA费用中33$??所以我认为我们可以省略^.*它将匹配。。您可以检查@rubyst:您的反例杂项费用是。。。不是您原始描述的一部分。@rock321987/^.*{PTA_-FEE}?=.\d+/.match?值不匹配包含在PTA费用12中$value包含在PTA费用12中$