ruby正则表达式匹配cent¢;

ruby正则表达式匹配cent¢;,ruby,regex,Ruby,Regex,我很难将字符串“79×/lb”与这个正则表达式匹配:(\$\124;×)\ d+(.\d{1,2}) 当分符号出现在开头时,它可以正常工作,但我不知道在字符串末尾附近需要添加什么 基本上,我计划从这个价格标签中提取一个浮点值,即0.79,提前感谢,我使用的是ruby。好吧,正则表达式要求字符串开头有$或。要匹配79第三/磅,您需要类似以下内容: (\d+)¢ 其中,、位于数字之后 一个单独的正则表达式来匹配您可能会看到的多种不同的格式,会稍微复杂一些。我建议将其作为多个正则表达式(为了简单起见

我很难将字符串“79×/lb”与这个正则表达式匹配:(\$\124;×)\ d+(.\d{1,2})

当分符号出现在开头时,它可以正常工作,但我不知道在字符串末尾附近需要添加什么


基本上,我计划从这个价格标签中提取一个浮点值,即0.79,提前感谢,我使用的是ruby。

好吧,正则表达式要求字符串开头有
$
。要匹配
79第三/磅
,您需要类似以下内容:

(\d+)¢
其中,
位于数字之后


一个单独的正则表达式来匹配您可能会看到的多种不同的格式,会稍微复杂一些。我建议将其作为多个正则表达式(为了简单起见),或者在这里询问另一个问题,指定要从中获取价格的字符串的完整范围。

也许您不需要在regexp中完成所有操作

#price is the string that contains the price
if price =~ /\$|¢/
   value = string.match(/\d+/)
end

或者沿着这些线的东西。

当你单独考虑每个案例时,最容易找到正确的正则表达式。如果我正确理解你的问题,有4种情况:

  • 美分,价格前有××符号
  • 美分,价格后有××符号
  • 美元(可选美分),价格前带有$符号
  • 美元(可选美分),价格后带有$符号
  • 首先,分别为每种情况编写正则表达式:

  • 、(\d{1,2})\b
  • \b(\d{1,2})、
  • \$(\d+(?:\。\d{2})?\b
  • \b(\d+(?:\。\d{2})\$
  • 然后,将它们组合成一个正则表达式:

    regex = %r{
      ¢(\d{1,2})\b          | # case 1
      \b(\d{1,2})¢          | # case 2
      \$(\d+(?:\.\d{2})?)\b | # case 3
      \b(\d+(?:\.\d{2})?)\$   # case 4
    }x
    
    然后,根据您的心意进行匹配:

    string_with_prices.scan(regex) do |match|
      # If there was a match in the first two groups, it's for cents
      cents   = $1 || $2
      # ...and the last two groups are dollars.
      dollars = $3 || $4
      if cents
        puts "found price (cents): #{cents}"
      elsif dollars
        puts "found price (dollars): #{dollars}"
      else
        puts 'unknown match!'
      end
    end
    

    注意:为了测试这段代码,我不得不使用“c”而不是“c”,因为Ruby告诉我
    无效的多字节字符(US-ASCII)
    。为避免此问题,请使用不同的字符编码,或者计算出“、”字符的编码值并将其直接嵌入正则表达式中,例如,
    %r{\x42}
    而不是
    %r{\x42}

    ,谢谢paxdiablo。实际上,我希望正则表达式匹配字符串,如“$3.50kg”或“、69/100g”等。我只是查找与$或×”相关的数值,无论它们出现在数值的开头还是结尾,忽略周围的文本。