7

文字列があるとしましょう:

x <- "This is a string (Yay, string!)" 

文字列を解析して、「Yay, string!」を返したいと思います。

それ、どうやったら出来るの?

たくさんの grep/grepl/gsub/sub/etc を試しましたが、正規表現または引数の適切な組み合わせが見つかりませんでした。はぁ。正規表現のスキルに取り組む必要があります。

4

3 に答える 3

9

これを行うには、次の 2 つの方法があります。

1:必要な文字列を見つけて、文字列全体を見つかったビットに置き換えます。(後方参照と呼ばれます)

gsub(".*\\((.*)\\).*", "\\1", x)
[1] "Yay, string!"

これは次の理由で機能します。

  • 後方参照を使用\\1して、括弧内の一致した文字列を参照します(.*)
  • 実際の文字列から括弧を除外したいので、これらを\\(and でエスケープする必要があり\\)ます。

2:不要なすべてのビットを空の文字列に置き換えます。

gsub(".*\\(|\\).*", "", x)
[1] "Yay, string!"

|が と同様に動作するため、これが機能しORます。

于 2012-09-10T21:31:18.400 に答える
5

また、一部の文字列に括弧で囲まれた複数の部分文字列が含まれている可能性があり、そのすべてを抽出したい場合は、正規表現 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!"
于 2012-09-10T22:01:32.367 に答える
3

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!"
于 2012-09-10T22:01:22.443 に答える