Ruby 用于货币iso代码和符号的正则表达式
我试图找到与货币iso代码或符号完全匹配的货币。我有一个货币和符号列表,在正则表达式中我只使用Ruby 用于货币iso代码和符号的正则表达式,ruby,regex,Ruby,Regex,我试图找到与货币iso代码或符号完全匹配的货币。我有一个货币和符号列表,在正则表达式中我只使用(美元|日元)和$等。因此,准则是: 应与货币代码USDJPY或符号$完全匹配。货币代码不区分大小写 Before和after可以有一个可选的数字 货币前后只能有一个数字(中间可以包含空格) 例如: a=4USD-$3+a4 USD/400日元*3USDa 输出将是(以ruby调用.scan):[“USD”、“USD”、“JPY”] 包括3USDa 我尝试了很多模式,但都没有效果,这里有一些模式: /\
(美元|日元)
和$等。因此,准则是:
应与货币代码USD
JPY
或符号$
完全匹配。货币代码不区分大小写
Before和after可以有一个可选的数字
货币前后只能有一个数字(中间可以包含空格)李>
例如:
a=4USD-$3+a4 USD/400日元*3USDa
输出将是(以ruby调用.scan
):[“USD”、“USD”、“JPY”]
包括3USDa
我尝试了很多模式,但都没有效果,这里有一些模式:
/\d+(?=(美元|日元)(?!\w))(美元|日元)(?=\d+(?!\w))/i
/(?如果您可以使用捕获组而不是整体匹配,那么以下可能是满足您需求的最简单的正则表达式解决方案:
/(?<!\w)\d*\s*(JPY|USD|\$|£)\s*\d*(?!\w)/i
/(?
如果您有一个所有货币的列表,则可以通过编程方式构造该正则表达式,如:
currencies = %w(USD JPN $ £)
currencies_pattern = currencies.map {|c| Regexp.escape(c) }.join("|")
full_pattern = /(?<!\w)\d*\s*(#{currencies_pattern})\s*\d*(?!\w)/i
货币=%w(美元JPN$)
Currences|pattern=currences.map{| c | Regexp.escape(c)}.join(“|”)
全模式=/(?)?
如上所述,并不是说此返回的$
与您的示例有效匹配。根据我对您的规则的理解,我不明白为什么应将$
视为不匹配。那么您希望从字符串中得到什么输出?$
不也应该与您的示例正确匹配吗?并且,为什么bob 4 USD
无效?您说“不能在后面直接包含任何其他内容”(可能也在前面),但bob
不是“前面直接”;它由一个空格分隔。另外,您如何知道$
是USD
而不是CAD
?两者使用相同的符号您不需要关闭它,因为其他人可能会发现它很有趣。您可能希望在评论中提及您使用的特定宝石组合。