我希望将这些格式的示例匹配为#。###,##
有效示例
455,80SomeText
1,00
30,82
7,78 SomeText
622,21
8.542,85
无效的例子
455,482
54,1
7454,50
我试过这个:^[0-9]+(\,[0-9][0-9])
更新1
答案 0 :(得分:1)
您的正则表达式中根本没有考虑千位分隔符......
^[0-9]{0,3}(?:\.[0-9]{3})*,[0-9]{2}(?![0-9])
如果您不想接受,42
,请使用:
^[0-9]{1,3}(?:\.[0-9]{3})*,[0-9]{2}(?![0-9])
(?:\.[0-9]{3})*
允许成千上万。
逗号不需要转义,而(?![0-9])
(负向前瞻)是为了防止数字跟随更多数字。
答案 1 :(得分:1)
试试这个正则表达式:
^\-?\d{1,3}(\.\d\d\d)*(,\d+)?
爆发:
^ # drop anchor at the start of the line. Then...
\-? # match an optional negative sign, followed by...
\d{1,3} # match 1-3 decimal digits, followed by...
( # a group, consisting of
\. # * a thousands separator, followed by
\d\d\d # * 3 decimal digits
)* # with the group repeated zero or more times, followed by...
( # a group, consisting of
, # * a decimal point, followed by
\d+ # * 1 or more decimal digits
)? # with the group being optional
您应该注意千位分隔符和小数点是特定于文化的。此外,并非所有文化都以3个为一组聚集数字。
要在跨文化中实现这种可移植性,您需要实例化一个合适的System.Globalization.CultureInfo
,向下钻取到其NumberFormatInfo
属性,并使用文化规则来动态构建正则表达式。组成
答案 2 :(得分:0)
我不确定你正在寻找什么格式,但听起来你可以在RegEx中使用重复限定符,例如^[0-9]+(,[0-9]{2})
我认为你的表达式中的问题是你正在逃避逗号而不是正则表达式特殊字符。
以下是RegEx的一个很好的参考:http://www.regular-expressions.info/repeat.html