在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).*?(?=,)
。这匹配紧接在 item
、date
、size
或 length
之前的位置,然后尽可能少地消耗换行字符以外的任何零个或多个字符, 直到最左边出现一个逗号而不消耗它(因为 (?=,)
是一个积极的先行)。
第二个正则表达式看起来像 (?<=item|date|size|length)[^,]*
,并且会像上面的模式一样匹配。但请注意区别:[^,]*
匹配逗号以外的任何零个或多个字符,因此 1) 即使后面没有逗号,它也会匹配,并且 2) 它会匹配任何字符,包括换行符。
我正在尝试编写一个函数来提取一组短语之前或之后的单词。
提取单个短语之后的单词,例如,在名为 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).*?(?=,)
。这匹配紧接在 item
、date
、size
或 length
之前的位置,然后尽可能少地消耗换行字符以外的任何零个或多个字符, 直到最左边出现一个逗号而不消耗它(因为 (?=,)
是一个积极的先行)。
第二个正则表达式看起来像 (?<=item|date|size|length)[^,]*
,并且会像上面的模式一样匹配。但请注意区别:[^,]*
匹配逗号以外的任何零个或多个字符,因此 1) 即使后面没有逗号,它也会匹配,并且 2) 它会匹配任何字符,包括换行符。