我想匹配这些流格式为 #.###,## 的示例
有效示例
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-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])
(负前瞻)是为了防止数字后面跟着更多的数字。
试试这个正则表达式:
^\-?\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
属性,并使用文化的数字组成规则动态构建正则表达式。
我不确定您正在寻找什么格式,但听起来您可以在 RegEx 中使用重复限定符,就像^[0-9]+(,[0-9]{2})
我认为您的表达式中的问题是您正在转义不是正则表达式特殊字符的逗号。
这是关于 RegEx 的一个很好的参考:http ://www.regular-expressions.info/repeat.html