2015-05-09 50 views
0

我有一个问题想与R. grep的精确匹配两种不同的类型的字符不同,我有两个不同的字符串grep的R中两个字符串是一个字符

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=1,case2=1)。不过,我想case1=integer(0)case2=1a,因为它在开始时没有加号。
case1=1匹配,case2=integer(0)对于b,因为它以加号开头。 我在做什么错?

+0

你所需输出的描述是混乱的。你可以尝试一个'^'前缀,它使字符串的开始处的匹配显式化。 –

+0

这样的答案应该是 案例1 =整数(0)(无) 案例2 = 1 对于b 案例1 = 1个 案例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 
+0

@RosanaZF你可以用'grep'取代'grepl'这里如果你想。 'grepl'的输出更直观。 – Frank

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