web-dev-qa-db-fra.com

Comment tout extraire jusqu'à la première occurrence du motif

J'essaie d'utiliser le package stringr dans R pour tout extraire d'une chaîne jusqu'à la première occurrence d'un trait de soulignement.

Ce que j'ai essayé

str_extract("L0_123_abc", ".+?(?<=_)")
> "L0_"

Fermer mais pas de cigare. Comment puis-je l'obtenir? De plus, idéalement, j'aimerais quelque chose de facile à étendre afin que je puisse obtenir les informations entre le 1er et le 2ème tiret bas et obtenir les informations après le troisième tiret bas.

16
Ben

Obtenir L0, vous pouvez utiliser

> library(stringr)
> str_extract("L0_123_abc", "[^_]+")
[1] "L0"

Le [^_]+ correspond à 1 ou plusieurs caractères autres que _.

Vous pouvez également fractionner la chaîne avec _:

x <- str_split("L0_123_abc", fixed("_"))
> x
[[1]]
[1] "L0"  "123" "abc"

De cette façon, vous aurez toutes les sous-chaînes dont vous avez besoin.

La même chose peut être obtenue avec

> str_extract_all("L0_123_abc", "[^_]+")
[[1]]
[1] "L0"  "123" "abc"
16
Wiktor Stribiżew

Le regex lookaround doit être

str_extract("L0_123_abc", ".+?(?=_)")
#[1] "L0"
3
akrun

Utilisation de gsub ...

gsub("(.+?)(\\_.*)", "\\1", "L0_123_abc")
1
jmartindill