我有以下正则表达式(?x:-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?)
,适用于
first -1.3 second 1.1e-2 third -1e-2 fourth -10 fith -0.1 sixth .3 done.
但是最后一个.3
。
我试图让第一组(?:0|[1-9]\\d*)
成为可选项,但这打破了正则表达式。如何使正则表达式适用于所有情况?
答案 0 :(得分:1)
首先要做的事情。您的正则表达式是:
-?(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?
您不需要(?x:...)
组,因为您的正则表达式中没有空格,并且您只需要以字符串文字的形式编写正则表达式时转义反斜杠。大多数响应者都会知道你的意思,但偶尔会有人假设你试图匹配字面反斜杠。
现在,您需要做的是为整个正则表达式添加另一种替代方法:
-?(?:(?:0|[1-9]\d*)(?:\.\d+)?(?:[eE][+-]?\d+)?|\.\d+)
如果要在所有情况下允许指数,请执行以下操作:
-?(?:(?:0|[1-9]\d*)(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)?
每个人在第一次遇到这个问题时,都希望有更优雅或更聪明的方式,但是没有。