文字列があるとしましょう:
x <- "This is a string (Yay, string!)"
文字列を解析して、「Yay, string!」を返したいと思います。
それ、どうやったら出来るの?
たくさんの grep/grepl/gsub/sub/etc を試しましたが、正規表現または引数の適切な組み合わせが見つかりませんでした。はぁ。正規表現のスキルに取り組む必要があります。
文字列があるとしましょう:
x <- "This is a string (Yay, string!)"
文字列を解析して、「Yay, string!」を返したいと思います。
それ、どうやったら出来るの?
たくさんの grep/grepl/gsub/sub/etc を試しましたが、正規表現または引数の適切な組み合わせが見つかりませんでした。はぁ。正規表現のスキルに取り組む必要があります。
これを行うには、次の 2 つの方法があります。
1:必要な文字列を見つけて、文字列全体を見つかったビットに置き換えます。(後方参照と呼ばれます)
gsub(".*\\((.*)\\).*", "\\1", x)
[1] "Yay, string!"
これは次の理由で機能します。
\\1
して、括弧内の一致した文字列を参照します(.*)
\\(
and でエスケープする必要があり\\)
ます。2:不要なすべてのビットを空の文字列に置き換えます。
gsub(".*\\(|\\).*", "", x)
[1] "Yay, string!"
|
が と同様に動作するため、これが機能しOR
ます。
また、一部の文字列に括弧で囲まれた複数の部分文字列が含まれている可能性があり、そのすべてを抽出したい場合は、正規表現 power-tools gregexpr()
and を使用しregmatches()
ます。
x <- "This is (a) string (Yay, string!)"
pat <- "(?<=\\()([^()]*)(?=\\))"
regmatches(x, gregexpr(pat, x, perl=TRUE))
# [[1]]
# [1] "a" "Yay, string!"
qdap バージョン 1.1.0はこれを行うことができます:
library(qdap)
x <- "This is a string (Yay, string!)"
bracketX(x)
bracketXtract(x)
収量:
> bracketX(x)
[1] "This is a string"
> bracketXtract(x)
[1] "Yay, string!"
ただし、このようなことをあまり行っていない場合、qdap を取得するのは少しやり過ぎかもしれません。
編集:ジョシュの例では...
> x <- "This is (a) string (Yay, string!)"
> bracketX(x)
[1] "This is string"
> bracketXtract(x)
[1] "a" "Yay, string!"