2015-05-09 2 views
0

У меня возникли проблемы, пытаясь соответствовать ровно два различных типов типов символов с Grep в R. У меня есть две разные строки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) 

Оба case1 и case2 соответствуют a и b (case1=1, case2=1). Однако мне бы хотелось, чтобы case1=integer(0)case2=1 для a, потому что он не имеет символа плюса в начале.
И case1=1 соответствует и case2=integer(0) для b, потому что он начинается с символа плюса. Что я делаю неправильно?

+0

Ваше описание нужного выхода сбивает с толку. Вы можете попробовать префикс '^', который делает соответствие в начале строки явным. –

+0

так для ответа должен быть case1 = целое число (0) (ничего) Вариант 2 = 1 для б case1 = 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 
Смежные вопросы