【发布时间】:2013-11-22 20:59:41
【问题描述】:
我很难为包含逗号分隔符的十进制数找到正确的正则表达式。
我确实发现了一些关于这个问题的其他问题,但是当我测试它们时,没有一个答案真的有效
到目前为止我得到的最好的是:
[0-9]{1,3}(,([0-9]{3}))*(.[0-9]+)?
到目前为止的两个主要问题:
1) 它记录数字之间有空格“3001 1”,而不是将它们分成 2 个匹配“3001”“1” - 我真的看不出我在正则表达式中允许空格的位置。
2) 我对正则表达式的开头\结尾有一个普遍的问题。
正则表达式应该匹配:
3,001
1
32,012,111.2131
但不是:
32,012,11.2131
1132,012,111.2131
32,0112,111.2131
32131
另外我希望它匹配:
1.(without any number after it)
1,(without any number after it)
as 1
(应忽略数字末尾的逗号或点)。
非常感谢! .
【问题讨论】:
-
对于初学者,除非您的语言的正则表达式库已经这样做了,否则您可能应该在两端锚定您的模式。否则,任何包含至少一位数字的字符串都会匹配。
-
您允许正则表达式中带有句点 (
.) 的空格,它匹配任何字符。转义句点 (\.) 以仅匹配句点。 -
我认为第二个和第三个问题根本不是问题。据我所知,他们不会匹配他们不应该匹配的。
-
OP 我们需要知道您使用的是哪个正则表达式引擎...如果后向和前瞻都可用,我只能让它绝对适用于所有情况(包括仅由空格分隔的数字)。
-
我在 c# 上使用正则表达式。