7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2020-01-22

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

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

おしまい。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?