Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于在ruby中将字符串与数字匹配的正则表达式_Ruby_Regex - Fatal编程技术网

用于在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中$