J'ai la chaîne suivante: "PRODUCT colgate good but not goodOKAY"
Je veux extraire tous les mots entre PRODUCT
et OKAY
Cela peut être fait avec sub
:
s <- "PRODUCT colgate good but not goodOKAY"
sub(".*PRODUCT *(.*?) *OKAY.*", "\\1", s)
donnant:
[1] "colgate good but not good"
Aucun package n'est nécessaire.
Voici une visualisation de l'expression régulière:
.*PRODUCT *(.*?) *OKAY.*
Vous pouvez utiliser gsub
:
vec <- "PRODUCT colgate good but not goodOKAY"
gsub(".*PRODUCT\\s*|OKAY.*", "", vec)
# [1] "colgate good but not good"
x = "PRODUCT colgate good but not goodOKAY"
library(stringr)
str_extract(string = x, pattern = Perl("(?<=PRODUCT).*(?=OKAY)"))
(?<=PRODUCT)
- regardez derrière le match pour PRODUCT
.*
correspond à tout sauf aux nouvelles lignes.
(?=OKAY)
- regardez en avant pour faire correspondre OKAY
.
Je dois ajouter que vous n'avez pas besoin du package stingr
pour cela, les fonctions de base sub
et gsub
fonctionnent bien. J'utilise stringr pour sa cohérence de syntaxe: que j'extrait, remplace, détecte, etc. les noms de fonction sont prévisibles et compréhensibles, et les arguments sont dans un ordre cohérent. J'utilise stringr
car cela m'évite d'avoir besoin de la documentation à chaque fois.
Vous pouvez utiliser le rm_between
fonction du package qdapRegex. Il prend une chaîne et une frontière gauche et droite comme suit:
x <- "PRODUCT colgate good but not goodOKAY"
library(qdapRegex)
rm_between(x, "PRODUCT", "OKAY", extract=TRUE)
## [[1]]
## [1] "colgate good but not good"