提取模式词后的 n 个词

Extract n words after a pattern word

这是我第一次尝试在 R 中使用 gsub 和正则表达式提取字符串。我想在文本的每个单元格中第一次出现单词“at”或“around”后提取三个单词列(示例中的列)并将提取内容放入新列 (new_extract)。

到目前为止我有以下内容:

df$new_extract <- gsub(".*at(\w{1,}){3}).*", "\1", df$col, perl = TRUE)

欢迎任何关于更改/不同方法的建议!

您的正则表达式仅尝试匹配 last at 之后的单词。此外,由于没有匹配 ataround 之间的间隙的模式(顺便说一下,你根本没有尝试匹配 around),你的模式将不会提取任何单词结束。

我建议这种方法 sub:

sub(".*?\ba(?:t|round)\W+(\w+(?:\W+\w+){0,2}).*", "\1", df$col, perl=TRUE)

参见regex demo

这里,

  • .*? - 从头开始​​匹配,除换行字符外的任何零个或多个字符尽可能少
  • \ba - 单词边界然后 a
  • (?:t|round) - tround
  • \W+ - 一个或多个非单词字符
  • (\w+(?:\W+\w+){0,2}) - 第 1 组:一个或多个单词字符,然后是零个、一两次出现的一个或多个非单词字符,后跟一个或多个单词字符
  • .* - 尽可能多的除换行符之外的任何零个或多个字符。