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