1. 趣旨
タ イ ト ル 通 り
スクレイピングしたテキストなど、R上の文字列データから半角括弧を削除したいって時にどうするべきか、書いておきます。
2. サンプル文字列
moji <- "(今夜はカレー)だと思う。"
moji
[1] "(今夜はカレー)だと思う。"
ここから半角括弧を削除して今夜はカレーだと思う。
という文字列に仕上げたいです。
基本的な方針は、gsub()
を利用して、括弧を空のテキストに置き換えます。
ただ、半角括弧はメタ文字なので、一工夫が必要です。
3. 削除してみよう
試行錯誤しているうちに、いくつか方法を見つけたので、お好きな方法でどうぞ。
方法1:クラスを利用する
> gsub("[()]","", moji)
[1] "今夜はカレーだと思う。"
この大括弧[]
で囲われた部分を「クラス」と呼びます。
クラスは、囲われた部分の中のどれか1文字とマッチングするのですが、この中だとほとんどのメタ文字が文字列として扱われるようです。
半角括弧()
も例によって、クラス内ではメタ文字ではなく普通の文字列として扱われるので、半角括弧を削除できるということですね。
方法2:正統派の正規表現を用いる
> library(dplyr)
> gsub("\\(", "", moji) %>%
gsub("\\)", "", .)
[1] "今夜はカレーだと思う。"
こちらは正規表現をゴリゴリに利用した方法です。
注意点は、「バックスラッシュ」を「2つ」重ねて使うこと。
普通のスラッシュを使ったり、バックスラッシュが1つだけだったりすると、エラーが出ます。
方法3:正規表現を無効化する
> library(dplyr)
> gsub("(", "", moji, fixed = TRUE) %>%
gsub(")", "", ., fixed = TRUE)
[1] "今夜はカレーだと思う。"
最後は、**「ええい、正規表現なぞ知らねぇ!」**という方向けの方法。
引数にfixed = TRUE
を指定すると、クォーテーション""
内の正規表現を完全無視して、文字列として扱ってくれます。
デメリットは、正規表現を無視するので、正規表現を用いた詳細な文字列検索や置換ができなくなること。
4. まとめ
個人的には方法1か方法2がオススメです。
特に方法1は、コードが短くて済むのがいいです。
ただ、最もベーシックかつ応用が利くのは方法2だと思います。
とはいえ、最終的な結果は変わらないので、しっくり来る方法でいいと思います。
おしまい。