Неправильное использование операторов повторения - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь воспроизвести этот код для моего случая:

word_vec <- paste(c('bonkobuns ', 'exomunch ', 'calipodians ', 
          'relimited '), collapse="|")
 gsub(word_vec, '', df1$text)

Однако я получаю эту ошибку:

Invalid use of repetition operators

Проблема в следующих выражениях:

c("c++", "c#", "vb.net", "objective-c")

Как включить их в список слов?

Ответы [ 3 ]

0 голосов
/ 22 мая 2018

Если у вас есть

wordVec <- c("c++", "c#", "vb.net", "objective-c")

Вам нужно экранировать специальные символы, такие как + специально из сообщения об ошибке, но также такие вещи, как ., чтобы быть в безопасности.Здесь мы добавляем косую черту перед этими символами при построении выражения.

wordList <- paste(gsub("([+.])","\\\\\\1", wordVec), collapse="|")
cat(wordList) # to remove extra string escapes
# c\+\+|c#|vb\.net|objective-c

И мы можем проверить с помощью

textVec <- paste("use the", wordVec, "tag")
# [1] "use the c++ tag"         "use the c# tag"         
# [3] "use the vb.net tag"      "use the objective-c tag"
gsub(wordList, "", textVec)
# [1] "use the  tag" "use the  tag" "use the  tag" "use the  tag"
0 голосов
/ 22 мая 2018

@ Решение MrFlick является наиболее идиоматичным и эффективным решением.Тем не менее, если мы хотим заставить его работать с fixed= TRUE, мы могли бы использовать Reduce:

Reduce(function(x,y) gsub(y,"",x,fixed=TRUE), wordVec, textVec)

# [1] "use the  tag" "use the  tag" "use the  tag" "use the  tag"
0 голосов
/ 22 мая 2018

+ и . - специальные символы в регулярном выражении.Конкретная ошибка, которую вы получаете, означает, что ++: + означает совпадение с предыдущим символом 1 или более раз.Попытка повторить повторяющийся символ не имеет смысла, поэтому возникает ошибка.

Чтобы соответствовать действительному + или . в регулярном выражении, вы должны избежать их, поставив обратную косую черту \\ передих.Обратите внимание, что вам нужно 2 обратной косой черты в R, поскольку вы также должны экранировать обратную косую черту.

Пример:

C++ следует записать как C\\+\\+ или C\\+{2}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...