逗号分隔数或正数的正则表达式

时间:2009-09-24 14:32:12

标签: c# regex .net-3.5

这是a previous question的后续内容。要求已经改变了,我正在寻找一些帮助,以逗号分隔数字或没有逗号的数字提出正则表达式。示例输入如下,以及一些失败的尝试。

感谢任何帮助。

可接受的输入:

1,234,567
1234567

不可接受的输入:

1234,567
1,234567

一些失败的尝试:

^(\d{1,3}(?:[,]\d{3})*)|((\d)*)$
^\d{1,3}((?:[,]?\d{3})*|(?:[,]\d{3})*)$

原创成功:

^\d{1,3}(?:[,]\d{3})*$

5 个答案:

答案 0 :(得分:4)

只需在末尾添加“或一个或多个数字”:

^(?:\d{1,3}(?:[,]\d{3})*|\d+)$

我认为你第一次几乎是正确的,并且没有正确匹配所有的括号。

答案 1 :(得分:2)

试试这个:

^\d{1,3}(?:(?:,\d{3})+|\d*)$

这将匹配任何以一到三位开头的序列,然后是

  • 逗号的一个或多个段,后跟三位数,或
  • 零或更多位数。

答案 2 :(得分:1)

为什么不使用Int.TryParse()而不是正则表达式?

答案 3 :(得分:0)

请参阅this answer以获得对“是否为数字?”问题的明确处理,包括正确正确以逗号分隔的数字组。

答案 4 :(得分:0)

我注意到的一件事是,正则表达式的第一位允许基于'0'的数字起作用。例如数字:

0,123,456

将使用接受的答案进行匹配。我一直在用:

((?<!\w)[+-]?[1-9][0-9]{,2}(?:,[0-9]{3})+)

这也确保了号码前面没有任何内容。它确实捕获少于1,000的数字。这是为了防止错误地捕获格式错误的数字。如果最终+?,则会捕获以下数字:

0,123
1,2 (as 2 separate numbers)

我有一组奇怪的数字要匹配(带逗号的整数,带空格而没有两者),所以我使用相当严格的正则表达式捕获这些组。

无论如何,要考虑一下!