web-dev-qa-db-ja.com

パターンが最初に現れるまですべてを抽出する方法

Rで stringr パッケージを使用して、文字列からアンダースコアが最初に現れるまでのすべてを抽出しようとしています。

私が試したこと

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

閉じるが葉巻はない。どうすれば入手できますか?また、1番目と2番目のアンダースコアの間の情報を取得し、3番目のアンダースコアの後に情報を取得できるように、拡張が簡単なものが理想的です。

16
Ben

L0を取得するには、

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

[^_]+は、_以外の1つ以上の文字と一致します。

また、_で文字列を分割することもできます:

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

このようにして、必要なすべてのサブストリングを取得できます。

同じことで達成できます

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

正規表現の見回しは

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

Gsubを使用しています...

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