【R】 文字列から半角括弧を削除したい


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だと思います。

とはいえ、最終的な結果は変わらないので、しっくり来る方法でいいと思います。

おしまい。