【发布时间】:2023-03-08 11:02:01
【问题描述】:
我想要一个正则表达式来匹配任何不正确的数学数字。下面的列表是作为正则表达式输入的示例列表:
1
1.7654
-2.5
2-
2.
m
2..3
2....233..6
2.2.8
2--5
6-4-9
所以前三个(粗体)不应该被选中,其余的应该。 这是一个与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
【问题讨论】:
-
a[is.na(as.numeric(a))]非常接近,除了“2”。 -
你关心前导零吗?你想要“012”匹配还是不匹配?我猜“0.12”必须匹配。那么尾随零呢,例如“0.1200”?
-
@Spacedman 我猜这些也是数学上正确的数字。 2==0002=2.0000=0002.000
-
@docendodiscimus 的似乎最好。
-
还有一些更奇特的数字格式,例如“1.2E05”(即 120000),但它们大多是由计算机生成的。