正则表达式用逗号和E / e分析十进制数

时间:2013-04-08 10:24:21

标签: regex

我正在尝试编写正则表达式,以便它为所有以下可能性返回true

1.2E3
12.22e32
+1.2
1,222
3,222
+3,222E23
3.2E2,333

如果逗号之后我有3位数,则逗号有效。 我有正则表达式返回可能适用于E / e和小数点

[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?

我也有以下正则表达式,它可以很好地用于逗号。

^(\d?\d?\d(,\d\d\d)*|\d+)(\.\d\d)?$

以上正则表达式的第一件事,我不明白它是如何工作的。我知道^用于否定表达式。我理解剩下的部分,但为什么要否定呢?

我已经尝试将两者结合起来完成我的工作。 以下是我的尝试(它们不适用于逗号)

"[-+]?[0-9]*(,[0-9][0-9][0-9])*\\.?[0-9]+([eE][-+]?[0-9]+)?"

"/[1-9](?:\\d{0,2})(?:,\\d{3})*(?:\\.\\d*[1-9]+([eE][-+]?[0-9]+)?)?|0?\\.\\d*[1-9]+([eE][-+]?[0-9]+)?|0/"

有人可以帮我解决这个问题。这似乎让我很头疼

2 个答案:

答案 0 :(得分:1)

这有效:

/^[+-]?[\d]{1,3}((\.[\d]{1,3})?|(,[\d]{3})*)([eE][\d]{1,3}(,[\d]{3})*)?$/

请注意,这将有更优雅的正则表达式。

干杯。

答案 1 :(得分:1)

我假设你不允许没有逗号的数字。这是123456无效,除非它写成123,456。鉴于这种假设,这个正则表达式将起作用:

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

您可以在debuggex上查看其工作原理的详细信息。