我想要一个正则表达式来匹配任何不正确的数学数字。下面的列表是作为正则表达式输入的示例列表:
1
1.7654
-2.5
2-
2.
m
2..3
2....233..6
2.2.8
2--5
6-4-9
所以前三个(在 Bold 中)不应该被选中,其余的应该被选中。
这是一个接近 another post 的话题但由于它的负面性质,它是不同的。
我正在使用 R,但我猜任何正则表达式都可以。
以下是上述帖子中的最佳镜头:
a <- c("1", "1.7654", "-2.5", "2-", "2.", "m", "2..3", "2....233..6", "2.2.8", "2--5", "6-4-9")
grep(pattern="(-?0[.]\\d+)|(-?[1-9]+\\d*([.]\\d+)?)|0$", x=a)
输出:
\[1\] 1 2 3 4 5 7 8 9 10 11
最佳答案
您可以使用以下正则表达式:
^(?:((\d+(?=[^.]+|\.{2,})).)+|(\d\.){2,}).*|[^\d]+$
见演示 https://regex101.com/r/tZ3uH0/6
请注意,您的正则表达式引擎应该支持可变长度的前瞻。并且您需要使用
multi-line
标志和评论中提到的你可以使用 perl=T
在 R 中主动前瞻。此正则表达式包含已与 OR 连接的 2 部分。第一部分是:
(?:((\d+(?=[^.]+|\.{2,})).)+|(\d\.){2,}).*
这将匹配后跟除点以外的任何数字或2个或更多点的数字组合。整个这一切都在一个可以重复的捕获组内,而不是这个组,你可以有一个数字后跟点2或更多时间(用于匹配一些字符串,如
2.3.4.
)。在第二部分,我们有
[^\d]+
它将匹配除数字之外的任何内容。Debuggex Demo
关于regex - 匹配除数字正则表达式之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386999/