匹配文本开头的浮点数 - 正则表达式

时间:2013-10-07 20:11:43

标签: c# regex

我希望将这些格式的示例匹配为#。###,##

有效示例

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

  • 数字格式#。###,##
  • 可以在数字
  • 后面包含一些文字

3 个答案:

答案 0 :(得分:1)

您的正则表达式中根本没有考虑千位分隔符......

^[0-9]{0,3}(?:\.[0-9]{3})*,[0-9]{2}(?![0-9])

regex101 demo

如果您不想接受,42,请使用:

^[0-9]{1,3}(?:\.[0-9]{3})*,[0-9]{2}(?![0-9])

regex101 demo

(?:\.[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