在R中的一组短语后提取words/texts

Extract words/texts after a group of phrases in R

我正在尝试编写一个函数来提取一组短语之前或之后的单词。

提取单个短语之后的单词,例如,在名为 x 的字符串变量中的 item,我很幸运地使用了以下代码:

str_extract(x, pattern="(?<=item).*?(?=,)")

如何将要查找的短语列表传递到正则表达式中?例如,我想创建一个名为 keywords 的短语列表,并提取这些短语后面的一组单词。我如何告诉正则表达式 keywords 是列表,而不是文本?

keywords <- c("item", 
              "date",
              "size",
              "length")

你的 pattern 必须看起来像

paste0("(?<=", paste(keywords, collapse="|"),").*?(?=,)")
paste0("(?<=", paste(keywords, collapse="|"),")[^,]*")

第一个模式看起来像 (?<=item|date|size|length).*?(?=,)。这匹配紧接在 itemdatesizelength 之前的位置,然后尽可能少地消耗换行字符以外的任何零个或多个字符, 直到最左边出现一个逗号而不消耗它(因为 (?=,) 是一个积极的先行)。

第二个正则表达式看起来像 (?<=item|date|size|length)[^,]*,并且会像上面的模式一样匹配。但请注意区别:[^,]* 匹配逗号以外的任何零个或多个字符,因此 1) 即使后面没有逗号,它也会匹配,并且 2) 它会匹配任何字符,包括换行符。