首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >匹配除数字外的所有规则表达式

匹配除数字外的所有规则表达式
EN

Stack Overflow用户
提问于 2015-07-13 15:08:05
回答 6查看 2.8K关注 0票数 5

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

代码语言:javascript
复制
1

1.7654

-2.5

2-

2.

m

2..3

2....233..6

2.2.8

2--5

6-4-9

因此,前三个(在Bold中)不应该被选中,其余的应该被选中。这是一个与另一个职位密切相关的话题,但由于它的负面性质,它是不同的。

我用的是R,但是任何正则表达式都可以。以下是上述帖子中最好的一招:

代码语言:javascript
复制
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)

其中产出:

代码语言:javascript
复制
\[1\] 1  2  3  4  5  7  8  9 10 11
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-07-13 15:27:06

代码语言:javascript
复制
a[grep("^-?\\d*(\\.?\\d*)$", a, invert=T)]

与建议编辑从@Frank。

速度测试

代码语言:javascript
复制
a <- rep(a, 1e4)
all.equal(a[is.na(as.numeric(a))], a[grep("^-?\\d+(\\.?\\d+)?$|^\\d+\\.$", a, invert=T)])
[1] TRUE

library(microbenchmark)
microbenchmark(dosc = a[is.na(as.numeric(a))],
           plafort = a[grep("^-?\\d*(\\.?\\d*)$", a, invert=T)])
# Unit: milliseconds
#     expr      min       lq     mean   median       uq      max neval
#     dosc 27.83477 28.32346 28.69970 28.51254 28.76202 31.24695   100
#  plafort 31.92118 32.14915 32.62036 32.33349 32.71107 35.12258   100
票数 2
EN

Stack Overflow用户

发布于 2015-07-13 15:25:54

您可以使用以下regex:

代码语言:javascript
复制
^(?:((\d+(?=[^.]+|\.{2,})).)+|(\d\.){2,}).*|[^\d]+$

见演示https://regex101.com/r/tZ3uH0/6

请注意,regex引擎应该支持变量length.and的前瞻性,您需要使用multi-line标志,正如注释中提到的,您可以在R中使用perl=T来主动向前看。

此正则表达式包含与OR.first部件连接的两个部分,如下所示:

代码语言:javascript
复制
(?:((\d+(?=[^.]+|\.{2,})).)+|(\d\.){2,}).*

它将匹配除点或2或更多dot.which以外的任何数字后面的任何数字的组合,所有这些都在一个可以重复的捕获组中,而不是这个组,您可以有一个数字,后面跟着点2或更长的时间(用于匹配一些字符串,如2.3.4.)。

在第二部分,我们有[^\d]+,它将匹配除数字以外的任何东西。

Debuggex Demo

票数 4
EN

Stack Overflow用户

发布于 2015-07-13 15:20:50

我认为这应该能做好:

代码语言:javascript
复制
re <- "^-?[0-9]+$|^-?[0-9]+\\.[0-9]+$"
R> a[!grepl(re, a)]
#[1] "2-"          "2."          "m"           "2..3"        "2....233..6" "2.2.8"       "2--5"       
#[8] "6-4-9" 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31386999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档