如何匹配号码123,340.00和1.9e10? 我试过正则表达式如下
^-?\d+(,)*(\d+\.(\d+e?))
但它只匹配123,340.00,我希望匹配这两个数字。任何的想法?请。
注意:我尝试过在线正则表达式工具https://regex101.com
答案 0 :(得分:1)
您应该至少在e
之后允许一些数字。此外,,*
匹配零个或多个逗号,我认为您应该只允许使用逗号+数字组。
我建议使用
'~^-?\d+(?:,\d+)*(?:\.\d+)?(?:e[+-]?\d+)?$~i'
请参阅regex demo
模式说明:
^
- 开始刺痛-?
- 可选的-
(您可以使用[-+]?
来匹配加号或减号)\d+
- 一位或多位(?:,\d+)*
- 逗号的零个或多个序列+ 1个或更多个数字(?:\.\d+)?
- 可选的小数部分,一个点和1+位数(?:e[+-]?\d+)?
- 可选的指数部分,e
,可选的减号或加号,以及1+位数$
- 字符串结束。请注意,~i
修饰符用于匹配e
和E
。
答案 1 :(得分:0)
稍微复杂一点:
^-?\d+(,\d+)*(\.\d+(e\d+)?)?$
答案 2 :(得分:0)
如果您正在寻找非常严格的东西,可以使用:
^-?[1-9](?:(?:\.[0-9]*[1-9])?[eE][+-]?[1-9][0-9]*|[0-9]{0,2}(?:,[0-9]{3})*(?:\.[0-9]+)?)$
它有点长但是当数字有:
时它不匹配012 # leading zeroes
1.20e5 # trailing zeroes in scientific notation
12.3e4 # more that one digit before the dot
1.2e0 # a zero as exponent
1,2345,678,9 # a crazy digit separator