亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在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 關注
  • 2833 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號