在R中的其他两个字符串之间提取一个字符串

我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串(可能是任何东西)。例如,我有一个字符串:


a<-" anything goes here, STR1 GET_ME STR2, anything goes here"


我需要提取GET_MESTR1和STR2之间的字符串(不带空格)。


我正在尝试str_extract(a, "STR1 (.+) STR2"),但是我正在全场比赛


[1] "STR1 GET_ME STR2"

我当然可以剥离已知字符串,以隔离所需的子字符串,但是我认为应该有一种更干净的方法,即使用正确的正则表达式来实现。


正则表达式 [R stringr


Cats萌萌
浏览 2782回答 3
3回答

肥皂起泡泡

您可以使用str_matchwith STR1 (.*?) STR2(请注意,如果您只想匹配两者之间的任何内容STR1并STR2使用,则空格是“有意义的” STR1(.*?)STR2)。如果出现多次,请使用str_match_all。library(stringr)a<-" anything goes here, STR1 GET_ME STR2, anything goes here"res <- str_match(a, "STR1 (.*?) STR2")res[,2][1] "GET_ME"使用基数R的另一种方法regexec(获得第一个匹配项):test = " anything goes here, STR1 GET_ME STR2, anything goes here STR1 GET_ME2 STR2"pattern="STR1 (.*?) STR2"result <- regmatches(test,regexec(pattern,test))result[[1]][2][1] "GET_ME"

潇潇雨雨

这是使用基数R的另一种方法a<-" anything goes here, STR1 GET_ME STR2, anything goes here"gsub(".*STR1 (.+) STR2.*", "\\1", a)输出:[1] "GET_ME"

小怪兽爱吃肉

另一种选择是用于qdapRegex::ex_between提取左右边界之间的字符串qdapRegex::ex_between(a, "STR1", "STR2")[[1]]#[1] "GET_ME"它还适用于多次出现a <- "anything STR1 GET_ME STR2, anything goes here, STR1 again get me STR2"qdapRegex::ex_between(a, "STR1", "STR2")[[1]]#[1] "GET_ME"&nbsp; &nbsp; &nbsp; &nbsp;"again get me"或多个左右边界a <- "anything STR1 GET_ME STR2, anything goes here, STR4 again get me STR5"qdapRegex::ex_between(a, c("STR1", "STR4"), c("STR2", "STR5"))[[1]]#[1] "GET_ME"&nbsp; &nbsp; &nbsp; &nbsp;"again get me"第一次捕获在“ STR1”和“ STR2”之间,而第二次捕获在“ STR4”和“ STR5”之间。
打开App,查看更多内容
随时随地看视频慕课网APP