我的文本输出如下:
str <- '=== AAAA === B§BBB === remove === remove1 === remove2 === AAAA === AAAA'
我想删除=== remove(包括)与其下一个出现的时间之间的所有子字符串:
str_2 <- '=== AAAA === B§BBB === AAAA === AAAA'
我在gsub()
中尝试过:
gsub("=== B§BBB*.*=== AAAA","",str))
但是它不起作用。
感谢您的帮助。
答案 0 :(得分:1)
回答更新的问题
str <- '=== AAAA === B§BBB === remove === remove1 === remove2 === AAAA === AAAA'
sub("(?:\\s*===\\s*remove\\S*)+","",str)
请参见R demo online和online regex demo。
模式匹配1+次连续出现的
\\s*
-0个或更多空白字符===
-子字符串\\s*
-0个或更多空白字符remove
-文字子字符串\\S*
-除空格以外的0个或多个字符回答原始问题
您可以使用
sub("=== remove.*?(\n\\s*?=== AAAA)","\\1",str)
详细信息
=== remove
-匹配文字子串.*?
-任意0个以上的字符,尽可能少(\n\\s*?=== AAAA)
-第1组(后来在替换模式中用\1
引用):换行符,0 +空格(\s*?
),=== AAAA
子字符串。也可以使用替代的PCRE正则表达式:
sub("(?m)(?:(?:^|\\R)\\h*===\\h*remove)+","",str, perl=TRUE)
详细信息
(?m)
-^
现在与行首匹配(?:(?:^|\\R)\\h*===\\h*remove)+
-超过1次出现
(?:^|\\R)
-行首或换行符\\h*===\\h*
-一个===
子字符串,其中包含0+个水平空格remove
-文字子字符串。答案 1 :(得分:0)
您可以使用stringi
软件包。
library(stringi)
stri_replace_all_fixed(str, " === remove", "")
[1] "=== AAAA === B§BBB === AAAA === AAAA"