2つの既知の部分文字列の間に現れる未知の部分文字列(何でもかまいません)を抽出する簡単な方法を見つけようとしています。たとえば、文字列があります:
_a<-" anything goes here, STR1 GET_ME STR2, anything goes here"
_
STR1とSTR2の間にある文字列_GET_ME
_を抽出する必要があります(空白なし)。
str_extract(a, "STR1 (.+) STR2")
を試していますが、完全に一致しています
_[1] "STR1 GET_ME STR2"
_
もちろん、必要な部分文字列を分離するために、既知の文字列を削除することもできますが、正しい正規表現を使用することで、よりクリーンな方法があるはずです。
STR1 (.*?) STR2
でstr_match
を使用できます(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" "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」の間で、2番目のキャプチャは「STR4」と「STR5」の間です。