正则表达式数字问题

时间:2010-06-20 16:56:43

标签: c# regex

这是我的数字dnumbers的正则表达式:

\d+(.\d+)+(,\d+)

但现在我有问题,3号或30号不再有效。我的正则表达式也必须是3号和40号才能通过。

THX

4 个答案:

答案 0 :(得分:3)

\d+(\.\d+)*(,\d+)?

正则表达式中的+表示“至少一个”,而*表示“零或更多”,?表示“一个或没有”。

此外,您必须将句点转义为\.,否则.字符是正则表达式中的特殊字符,表示“任何单个字符”。

如果要确保数字中的.(如果存在)始终按3的组分开,则可以使用此({x}语法表示“完全x重复” “):

\d+(\.\d{3})*(,\d+)?

或者要一直强制使用千位分隔符,你可以使用它({x,y}语法意味着“从x到y重复的任何地方):

\d{1,3}(\.\d{3})*(,\d+)?

答案 1 :(得分:1)

\d+((\.\d+)|(,\d+))?

答案 2 :(得分:1)

如果您真正想要的是.千位分隔符,,代表小数分隔符,请尝试以下操作:

\d{1,3}(\.\d{3})*(,\d+)?

答案 3 :(得分:1)

所以你想要一个匹配1和3.000和3.000,5?

的正则表达式

如果您不想捕获结果,请执行以下操作:

[.\d]+(,\d+)?

但请记住,这不是很准确,因为它也匹配2.0.0,12,你还应该包括加减支票:

^(\+|-)?[.\d]+(,\d+)?

在C#中你可以用

做得更好
double result;
bool isDouble = Double.TryParse("3.000,5", Globalisation.CultureInfo.InvariantCulture);