重复运算符的使用无效

时间:2018-05-22 15:20:11

标签: r

我尝试为我的案例重现this代码:

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 :(得分:2)

如果你有

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"

答案 1 :(得分:2)

@ 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"

答案 2 :(得分:1)

+.是正则表达式中的特殊字符。您获得的特定错误来自+++表示,与前一个字符匹配1次或更多次。试图重复重复字符没有意义,因此错误。

要匹配正则表达式中的实际+.,您需要通过在它们前面添加反斜杠\\来转义它们。请注意,您需要在R中使用2个反斜杠,因为您也必须转义反斜杠。

示例:

C++应写为C\\+\\+C\\+{2}