J'essaie de trouver un moyen simple d'extraire une sous-chaîne inconnue (pouvant être n'importe quoi) qui apparaît entre deux sous-chaînes connues. Par exemple, j'ai une chaîne:
a<-" anything goes here, STR1 GET_ME STR2, anything goes here"
J'ai besoin d'extraire la chaîne GET_ME
qui se situe entre STR1 et STR2 (sans les espaces blancs).
J'essaie str_extract(a, "STR1 (.+) STR2")
, mais j'obtiens tout le match
[1] "STR1 GET_ME STR2"
Je peux bien sûr effacer les chaînes connues pour isoler la sous-chaîne dont j'ai besoin, mais je pense qu'il devrait exister une méthode plus propre pour le faire en utilisant une expression régulière correcte.
Vous pouvez utiliser str_match
avec STR1 (.*?) STR2
(notez que les espaces sont "significatifs", si vous souhaitez simplement faire correspondre n'importe quoi entre STR1
et STR2
, utilisez STR1(.*?)STR2
). Si vous avez plusieurs occurrences, utilisez 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"
Une autre manière d’utiliser la base R regexec
(pour obtenir le premier match):
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"
Voici un autre moyen d'utiliser la base R
a<-" anything goes here, STR1 GET_ME STR2, anything goes here"
gsub(".*STR1 (.+) STR2.*", "\\1", a)
Sortie:
[1] "GET_ME"