正则表达式捕获一个数字

时间:2015-11-15 18:34:22

标签: regex

我有以下正则表达式(?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*)成为可选项,但这打破了正则表达式。如何使正则表达式适用于所有情况?

1 个答案:

答案 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+)?

每个人在第一次遇到这个问题时,都希望有更优雅或更聪明的方式,但是没有。