gsub 在 R 中的两个字符串之间查找和替换文本

gsub Find and replace text between two strings in R

我必须在包含文本的列的 1000 行中使用 gsub 函数。在每一行中,我都想删除 "said:" 和 "click to expand..." 之间出现的每个单词,因为它们只是之前推文的副本。我正在尝试使用 gsub 来完成我的任务

content2<-as.data.frame(gsub(".*said:(.*?)expand.... *", " ", content2$txt,fixed=TRUE),stringsAsFactors = FALSE);

但是,它只是删除 "said:" 和展开。 content2 是对 1 个变量数据框的 100 次观察,我必须为每一行执行任务。在 wiktor 回复后,我试图查看他写的行是否有效。我仍然可以看到说:然后单击以展开....在第 35 行中,wiktor 的代码我猜只适用于第一行(无论如何不包含要删除的行)。我尝试使用 apply 将其应用到每一行但未成功,如下所示,b3esides 太慢了,它给了我其他错误:

ops<-apply(content2,1,gsub("(said:).*?(click to expand\.{3})", "\1 \2", content2,fixed=TRUE))

只是查看了重复的 post ,它没有回答我的问题,即:如果我想替换模式之间的所有字符,我应该怎么办让我说我想替换 [= 之间的所有字符串24=] 和 "click to expand" 对于 100X1 数据框的所有行。所有行都包含一组字符串,输出应该是尺寸为 100X1 的数据框: ops<-gsub("(said:).*?(click to expand\.{3})", "\1 \2", test)

@WiktorStribiżew 谢谢它似乎工作唯一的问题我也想删除 "said:" & "click to expand..." 我制作了以下可重现的代码你可以看到 "said:" & "click to expand..." 是没有被删除。

test<-as.data.frame(c("he said: i wanna be a rockstar click to expand....ok great but how you gonna do it", 
                      "rockstar said: so how you gonna do it click to expand.... we are wanna be a big rockstar, hang out in collest bar vip with movie star"),stringsAsFactors=FALSE)
ops<-lapply(test, gsub, pattern = '(said:).*?(click to expand\.{3})', replacement ="\1 \2", perl=TRUE)
ops<-as.data.frame(ops,stringsAsFactors = FALSE)

要从数据框中的所有列中删除从 said: 到最左边 click to expand... 的所有子字符串,您可以使用

content2[] <- lapply(content2, gsub, pattern = '(?s)said:.*?click to expand\.{3}', replacement =" ", perl=TRUE)

PCRE 正则表达式(注意 perl=TRUE 启用 PCRE 引擎)匹配:

  • (?s) - 启用 . 匹配换行字符(默认情况下不匹配)
  • said: - 一个字符串(要将其作为一个完整的单词进行匹配,请在前面添加 \b
  • .*? - 任何 0+ 个字符,尽可能少
  • click to expand\.{3} - click to expand... 子串(\.{3} 匹配一个 . 字符三次)。