gre中的R两个字符串相差一个字符

时间:2015-05-09 02:03:49

标签: regex r

我在尝试使用R中的grep匹配两种不同类型的字符时遇到问题 我有两个不同的字符串

a <- "10-13"  
b <-"+0-2"

当我做的时候

case1 <- grep("+[0-9]-[0-9]",a, ignore.case=FALSE, perl=FALSE, fixed=FALSE, 
    useBytes=FALSE, invert=FALSE) 

case2 <- grep("[0-9]-[0-9]",a, ignore.case=FALSE, perl=FALSE, fixed=FALSE,
    useBytes=FALSE, invert=FALSE)

case1case2匹配abcase1=1case2=1)。不过我希望case1=integer(0) case2=1 a,因为它在开头没有加号。
case1=1匹配,case2=integer(0)匹配b,因为它以加号开头。 我做错了什么?

2 个答案:

答案 0 :(得分:0)

第一次逃脱\\+,并表示你想要第二个数字......?

sapply(c(a,b),function(s)grepl("\\+[0-9]-[0-9]",s)) # FALSE TRUE
sapply(c(a,b),function(s)grepl("[0-9]{2}-[0-9]",s)) # TRUE FALSE

如果您只想测试“开头有+”:

sapply(c(a,b),function(s)grepl("^\\+",s))
# 10-13  +0-2 
# FALSE  TRUE

答案 1 :(得分:0)

我想您需要以下正则表达式命令。

有或没有前导+

grep("[0-9]+-[0-9]+", a)
# [1] 1
grep("[0-9]+-[0-9]+", b)
# [1] 1

使用前导+

grep("\\+[0-9]+-[0-9]+", a)
# integer(0)
grep("\\+[0-9]+-[0-9]+", b)
# [1] 1