我在尝试使用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)
case1
和case2
匹配a
和b
(case1=1
,case2=1
)。不过我希望case1=integer(0)
case2=1
a
,因为它在开头没有加号。
并case1=1
匹配,case2=integer(0)
匹配b
,因为它以加号开头。
我做错了什么?
答案 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