我正在编写解析器,我需要捕获"数字"但在" e"。之前要避免使用诸如[ - +]之类的字符
我的问题是模式标记" - "或" +"在我的尾数之后,它不应该。
我使用这种模式:
/ ^ [0-9] + [ - + e.0-9] * $ /克
//Test strings:
//wrong string - match - PROBLEM, but should not be because of '-' or '+' after mantissa
1.2-
2.3-e
1.2+
1.2+e
//wrong string - does not match - OK
-123
1.2b+3
+123
-123-e9
//right string - match - OK
1
1.
1.2
123.5
.2
1.2.
.2.
1e3
.e3
1.e3
1.2e3
1.2e+3
1.2e-3
1.2e3.
1.2e3.4
1.2e-399
1.2e+e3
字符串标记为'错误'不应该抓住。
这些字符串将被分割成这样的表,但在另一个模块中
我只是想避免被我的模特抓住
1.2- // [' 1.2',' - ']
2.3-e // [' 2.3',' - ',' e']
1.2+ // [' 1.2',' +']
1.2 + e // [' 1.2',' +',' e']
您是否知道如何改进我的模式或者应该以不同的方式书写?
TEST ^[.0-9]+[-+e.0-9]*$
SOLVED ^\.?\d*(\.(\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$
答案 0 :(得分:1)
我已经为regex101测验做了一些解决方案,我想出了这个解决方案:DEMO
^[.,]?(\d)*([.,](\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$
编辑并接受最终答案:^\.?\d*(\.(\d+)?)?((?:e[+-]?|[+-]e)*\d+(\.\d+)?)?\.?$
答案 1 :(得分:0)
这个怎么样,它匹配更多,但不是一切,因为我不完全确定你的规则" (例如,当多个.
好的时候?为什么1b+1
没问题?为什么e+e
或1-e
好吗?)
/^[+-]?(?:\d*\.\d+|\d+\.\d*|\d+)(?:e[+-]?(?:\d*\.\d+|\d+\.\d*|\d+))?$/g