regex - 匹配除数字正则表达式之外的所有内容

标签 regex r

我想要一个正则表达式来匹配任何不正确的数学数字。下面的列表是作为正则表达式输入的示例列表:

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]+它将匹配除数字之外的任何内容。

Regular expression visualization

Debuggex Demo

关于regex - 匹配除数字正则表达式之外的所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386999/

相关文章:

java - java中split()和contains()之间使用正则表达式有什么区别

java - 使用Java和正则表达式来修复路径

R多y轴交互图

r - rCharts 和 DT 在 rmarkdown 中兼容吗?

r - 将矩阵从 char 转换为 num 而不丢失结构?

ruby - 在 ruby 中存储正则表达式匹配?

regex - 在 R 中组合字符向量中的行

php - 正则表达式:从 FFMPEG 日志中获取 FPS

r - c() 故障?

r - 使用 Split 在 R 中创建新数据框,并根据可变条件重命名