R语言使用正则表达式删除以QUOTE开头且结尾的子串问题
问题原因分析
你编写的正则表达式存在逻辑错误:"QUOTE*"中的*是量词,仅作用于紧邻它的前一个字符E,含义是匹配QUOT后接0个或多个E的子串,因此只能匹配到开头的QUOTE,无法命中两个QUOTE以及中间的全部内容,也就达不到删除目标子串的效果。
正确实现代码
使用非贪婪匹配规则,匹配以QUOTE开头、QUOTE结尾的完整子串后替换为空即可:
x <- c("QUOTEI think I am okayQUOTE I don't think you are") # perl=TRUE 开启非贪婪匹配支持 xx <- gsub(pattern = "QUOTE.*?QUOTE", replacement = "", x = x, perl = TRUE)
运行后xx的输出结果完全符合预期:
[1] " I don't think you are"
补充说明
如果字符串中存在多组QUOTE包裹的内容,该写法也可以正确逐组匹配删除,不会出现跨组过度匹配的问题。如果需要去除结果首尾的冗余空格,可额外调用trimws(xx)处理。
内容的提问来源于stack exchange,提问作者Louise
相关产品推荐
相关产品推荐

