str_replace(パッケージStringR)Rの括弧を置き換えることはできませんか?

StackOverflow https://stackoverflow.com//questions/23065378

  •  26-12-2019
  •  | 
  •  

質問

文字列を持っている、言う

 fruit <- "()goodapple"
.

文字列内の括弧内を取り外したい。私は通常この種の問題を処理できるので、stringrパッケージを使うことにしました。私は使用します:

str_replace(fruit,"()","")
.

しかし、何も置き換えられず、以下のものが置き換えられます:

[1] "()good"
.

右半機ブラケットの交換したい場合は、次のように機能します。

str_replace(fruit,")","") 
[1] "(good"
.

しかし、左半分のブラケットが機能しない:

str_replace(fruit,"(","")
.

と次のエラーが表示されます。

Error in sub("(", "", "()good", fixed = FALSE, ignore.case = FALSE, perl = FALSE) : 
 invalid regular expression '(', reason 'Missing ')''
.

だれでもこれが起こる理由は何ですか?文字列に "()"を削除する方法はありますか。

役に立ちましたか?

解決

括弧の脱出...

str_replace(fruit,"\\(\\)","")
# [1] "goodapple"
.


"stringi"パッケージ 。「StringR」への同様のアプローチがありますが、より柔軟な機能があります。たとえば、検索文字列が正規表現パターンではなく、検索文字列が固定パターンであるため、ここでは便利なstri_replace_all_fixedがあります。

library(stringi)
stri_replace_all_fixed(fruit, "()", "")
# [1] "goodapple"
.


もちろん、基本的なgsubはこれを細かくするだけです。

gsub("()", "", fruit, fixed=TRUE)
# [1] "goodapple"
.

他のヒント

承認された回答はあなたの正確な問題に対して機能しますが、より一般的な問題ではありません:

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace(my_fruits,"\\(\\)","")
## "goodapple"  "(bad)apple", "(funnyapple"
.

これは、正規表現が「(」の後に「)」と完全に一致するためです。

ブラケットペアについてのみ気にすると、これはより強い解決策です:

str_replace(my_fruits, "\\([^()]{0,}\\)", "")
## "goodapple"   "apple"       "(funnyapple"
.

MJHの答えの建物は、これはすべて(または)を取り除く:

my_fruits <- c("()goodapple", "(bad)apple", "(funnyapple")
str_replace_all(my_fruits, "[//(//)]", "")

[1] "goodapple"  "badapple"   "funnyapple"
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top