str_replace(パッケージStringR)Rの括弧を置き換えることはできませんか?
質問
文字列を持っている、言う
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"
. 所属していません StackOverflow