使用R中的stringr以任意顺序同时提取(子集)两个ord​​s

Extract(subset) two ords same time in any order with stringr in R

我正在为正则表达式而苦苦挣扎。

我有下面这个字符向量:

   texts <- c('I-have-text-2-and-text-8','I-have-text-1-and-text-2','I-have-text-7-and-text-8','I-have-text-2-and-text-1','I-have-text-4-and-text-5','I-have-text-11-and-text-12','I-have-text-13-and-text-32','I-have-text-8-and-text-6')

我有两个词对我很重要:text-1text-2。我需要它们两个任何顺序

我想用它们提取文本。

输出应该是:[1]'I-have-text-1-and-text-2' [2]I-have-text-2-and-text-1

我一直在使用 stringr 的 str_subset,但我不知道它的正则表达式。

str_subset(texts, 'regex')

任何帮助

“任何顺序的两种模式”对于单个正则表达式模式来说听起来很复杂,但在两个单独的模式中却很简单:

texts[str_detect(texts, "text-1") & str_detect(texts, "text-2")]
# [1] "I-have-text-1-and-text-2" "I-have-text-2-and-text-1"

使用 str_subset - regex 将指定 text-1 后跟字符 (.*) 然后 text-2 或 (| ) 反过来

library(stringr)
str_subset(texts, 'text-1.*text-2|text-2.*text-1')
[1] "I-have-text-1-and-text-2" "I-have-text-2-and-text-1"

您可以使用 | 的交替模式在 text-1text-2 之间交替,反之亦然:

grep("text-1.*text-2|text-2.*text-1", texts, value = TRUE)
[1] "I-have-text-1-and-text-2" "I-have-text-2-and-text-1"

stringr等价物是:

str_subset(texts, "text-1.*text-2|text-2.*text-1")