为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Cats萌萌 2019-11-19 15:41:11
我试图找到一种简单的方法来提取出现在两个已知子字符串之间的未知子字符串(可能是任何东西)。例如,我有一个字符串: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
查看完整描述

3 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

您可以使用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"


查看完整回答
反对 回复 2019-11-19
?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这是使用基数R的另一种方法


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


gsub(".*STR1 (.+) STR2.*", "\\1", a)

输出:


[1] "GET_ME"


查看完整回答
反对 回复 2019-11-19
?
小怪兽爱吃肉

TA贡献1852条经验 获得超1个赞

另一种选择是用于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"       "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"       "again get me"

第一次捕获在“ STR1”和“ STR2”之间,而第二次捕获在“ STR4”和“ STR5”之间。


查看完整回答
反对 回复 2019-11-19
  • 3 回答
  • 0 关注
  • 2621 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信