我尝试为我的案例重现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")
如何将它们包含在单词列表中?
答案 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}