这是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})*$
答案 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)
我有一组奇怪的数字要匹配(带逗号的整数,带空格而没有两者),所以我使用相当严格的正则表达式捕获这些组。
无论如何,要考虑一下!