【发布时间】:2020-10-24 23:06:23
【问题描述】:
我有以下字符串:
'USD 100'
基于this post,如果USD 包含在字符串中或如果USD 不包含在字符串中,我将尝试捕获100 .
例如:
'USD 100' # => '100'
'YEN 300' # => ['Y', 'E', 'N']
到目前为止,我已经解决了这个问题,但它不起作用:
https://rubular.com/r/cK8Hn2mzrheHXZ
有趣的是,如果我将USD 放在它似乎有效的数量之后。理想情况下,无论货币字符的位置如何,我都希望具有相同的行为。
【问题讨论】:
-
模式
\b(?:USD (\d+)|(?!USD\b)(\w+) \d+)\b很接近,除了它捕获整个非美元货币符号,而不是捕获单独捕获组中的每个字母。要捕获每个字母,您可能需要一些 Ruby 技巧。 -
YEN也可以解决问题。它不必是数组中的每个字母。不过我想知道;为什么前瞻不起作用? -
你是这个意思吗?
(?:(USD) )?(?(1)(\d+)|([a-zA-Z]))rubular.com/r/quQSSLzsj0Om1q然后检查组2或组3 -
我在my answer 中解释了这个问题。基本上,只有包含
USD的字符串才会匹配,因为正向前瞻需要它。