« [R]正規表現を使用して文字列を別の文字列に置換する | トップページ | [R]重回帰モデルにおけるt検定(「44の例題で学ぶ計量経済学」(オーム社)pp.185-188) »

2023年11月21日 (火)

[R]正規表現を使用して文字列を別の文字列に置換する

stringrパッケージのstr_replace_all関数を使う。元となる文字列にはベクトルを指定することができる。str_replaceという別の関数もあり、こちらは各文字列で最初にパターンにマッチした箇所しか置換をしない。

> library("stringr")
> s <- c("ABCD", "BCDE", "CDEF")
> str_replace_all(s, "B", "b")
[1] "AbCD" "bCDE" "CDEF"
> str_replace_all(s, "^B", "b")
[1] "ABCD" "bCDE" "CDEF"
> str_replace_all(s, "[E-F]$", "b")
[1] "ABCD" "BCDb" "CDEb"
> str_replace_all(s, "[E-F]", "b")
[1] "ABCD" "BCDb" "CDbb"
> str_replace(s, "[E-F]", "b")
[1] "ABCD" "BCDb" "CDbF"

ただ文字列を置換するのではなく、パターンに含まれる文字列を使用して置き換えたい場合は、キャプチャによるグループ化を利用する。パターン内で( )(括弧)に挟まれた範囲はグループ化(キャプチャという)される。このグループには、キャプチャされた順番に1から始まる連番が付けられ、置換後の文字列で\1, \2, …と挿入することで、置換後の文字列に挿入することができる(実際にはエスケープシーケンスを使用する必要があるので、\\1, \\2, …とする)。

以下は7桁の数字(○○○○○○○)を郵便番号の表記(○○○-○○○○)に置き換えた例。

> s <- c("1234567", "9876543", "3210")
> str_replace_all(s, "([0-9]{3})([0-9]{4})", "\\1-\\2")
[1] "123-4567" "987-6543" "3210"

« [R]正規表現を使用して文字列を別の文字列に置換する | トップページ | [R]重回帰モデルにおけるt検定(「44の例題で学ぶ計量経済学」(オーム社)pp.185-188) »

R(正規表現)」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« [R]正規表現を使用して文字列を別の文字列に置換する | トップページ | [R]重回帰モデルにおけるt検定(「44の例題で学ぶ計量経済学」(オーム社)pp.185-188) »