将货币与parens中的负数匹配或以"为前缀 - "

时间:2015-07-23 18:56:19

标签: regex

我发现this StackOverflow answer提供了一个正则表达式模式,用于匹配货币值,其中数字与,分组,并且可能包含也可能不包含小数后跟两位小数。它还匹配包含在parens ()中的负数。那种模式是:

^(\()?[0-9]+(?>,[0-9]{3})*(?>\.[0-9]{2})?(?(1)\))$

我希望匹配这个确切的模式,除了我还要考虑带有-前缀而不是()(但不是两者)的负数。因此,负数可以表示为-123.45(123.45),但不能表示为(-123.45)-(123.45)

我已经使用上面显示的模式创建了this regex101 page以及我想要匹配的一些匹配示例,以及一些我希望匹配的示例。< / p>

例如,它应匹配:

  123.45
1,234.56
 (123.45)
   -1.00

但不应该匹配:

123.456
-16.1
(-1.23)

我想也许我可以用^(\(|\-)?开始模式以匹配(-,然后条件构造将只关注匹配结束)如果找到了一个开头(,但这似乎不起作用。

1 个答案:

答案 0 :(得分:2)

你很亲密。您可以在开始时使用非捕获组:

^(?:(\()|-)?\d+(?>,[0-9]{3})*(?>\.[0-9]{2})?(?(1)\))$

RegEx Demo