我正在尝试找到与货币iso代码或符号完全匹配的货币。我有一个货币和符号列表,在正则表达式中我只使用(USD|JPY)
和$|£|
等。所以标准是:
USD
JPY
或符号$
£
完全匹配。货币代码不区分大小写实施例:
a = 4USD - $3 + a4 USD / JPY 400 * 3USDa
输出将是(在ruby中调用.scan
):["USD", "$", "USD", "JPY"]
不正确的是包含3USDa
我一直在尝试很多模式无济于事,其中有些模式:
/\d+(?=(USD|JPY)(?!\w))|(USD|JPY)(?=\d+(?!\w))/i
/(?<=(JPY|USD))*\d|(?<=\d)(JPY|USD)/i
答案 0 :(得分:1)
如果您使用捕获组而不是整体匹配,那么以下可能是满足您要求的最简单的正则表达式解决方案:
/(?<!\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
如上所述,并非 返回$
作为您示例中的有效匹配。根据我对您的规则的理解,我不明白为什么$
应被视为不匹配。