Rでよく使う正規表現のパターンを、カテゴリー別に整理してみた。
Rで使用する正規表現いろいろ
文字の検索・位置指定に関するパターン
パターン |
説明 |
例 |
^ |
文字列の先頭を指定 |
^Hello は "Hello World" に一致 |
$ |
文字列の末尾を指定 |
World$ は "Hello World" に一致 |
\\b |
単語の境界 (word boundary) |
\\bword\\b は "word" に一致 |
\\B |
単語の境界でない位置 |
\\Bword\\B は "keyword" に一致 |
. |
任意の1文字にマッチ |
a.c は "abc", "adc" にマッチ |
使用例
str_detect("Hello World", "^Hello") # Hello で始まる
str_detect("Hello World", "World$") # World で終わる
str_detect("Hello World", "\\bWorld\\b") # World に一致
str_detect("Hello keyword", "\\Bword\\B") # word に一致
str_detect("abc", "a.c") # a と c の間に何か文字がある
文字の種類を表すパターン
パターン |
説明 |
例 |
[abc] |
a, b, c のいずれか1つに一致 |
[abc] は a, b, c のいずれか |
[^abc] |
a, b, c 以外の文字に一致 |
[^abc] は a, b, c 以外 |
[a-z] |
a〜z の小文字に一致 |
[a-z] は a から z までの小文字 |
[A-Z] |
A〜Z の大文字に一致 |
[A-Z] は A から Z までの大文字 |
[0-9] |
0〜9 の数字に一致 |
[0-9] は 0 から 9 までの数字 |
\\d |
1つの数字 (0-9) に一致 |
\\d は 1桁の数字に一致 |
\\D |
数字以外に一致 |
\\D は数字以外の1文字に一致 |
\\w |
単語の文字 (a-z, A-Z, 0-9, _) |
\\w は単語の一部に一致 |
\\W |
単語の文字以外 |
\\W は単語の一部ではない部分 |
使用例
str_detect("abc", "[abc]") # a, b, c のいずれか
str_detect("abc", "[^abc]") # a, b, c 以外
str_detect("abc", "[a-z]") # a から z までの小文字
str_detect("ABC", "[A-Z]") # A から Z までの大文字
str_detect("123", "[0-9]") # 0 から 9 までの数字
str_detect("123", "\\d") # 1桁の数字
str_detect("abc", "\\w") # 単語の一部
str_detect("abc", "\\W") # 単語の一部ではない部分
繰り返しを指定するパターン
パターン |
説明 |
例 |
* |
0回以上の繰り返し |
a* は 0回でも一致 |
+ |
1回以上の繰り返し |
a+ は "aaa" に一致 |
? |
0回または1回の繰り返し |
ab?c は "abc" または "ac" に一致 |
{n} |
ちょうどn回の繰り返し |
a{3} は "aaa" に一致 |
{n,} |
n回以上の繰り返し |
a{2,} は "aa", "aaa" に一致 |
{n,m} |
n回以上m回以下の繰り返し |
a{2,3} は "aa" や "aaa" に一致 |
使用例
str_detect("aaa", "a*") # 0回でも一致
str_detect("aaa", "a+") # 1回以上
str_detect("abc", "ab?c") # b があってもなくても
str_detect("aaa", "a{3}") # aが3回
str_detect("aa", "a{2,}") # aが2回以上
グループ化とORの指定
パターン |
説明 |
例 |
(abc) |
abcを1つのグループ化 |
(abc) は "abc" に一致 |
(?:abc) |
マッチするが、キャプチャしない |
(?:abc) は "abc" に一致 |
a|b |
a または b に一致 |
a|b は a または b に一致 |
使用例
str_detect("abc", "(abc)") # abc に一致
str_detect("abc", "(?:abc)") # abc に一致
str_detect("a", "a|b") # a に一致
後方参照
パターン |
説明 |
例 |
\\1 |
1番目のグループに一致 |
(abc)\\1 は "abcabc" に一致 |
使用例
str_detect("abcabc", "(abc)\\1") # abcabc に一致
先読み・後読み
パターン |
説明 |
例 |
(?=...) |
...の直前の位置にマッチ |
(?=\\d) は数字の前の位置 |
(?<=...) |
...の直後の位置にマッチ |
(?<=\\d) は数字の後の位置 |
(?!...) |
...でない位置にマッチ |
(?!abc) は "abc" 以外にマッチ |
(?<!...) |
...の直前でない位置にマッチ |
(?<!abc) は "abc" 以外にマッチ |
使用例
str_detect("abc123", "(?=\\d)") # 数字の直前
str_detect("123abc", "(?<=\\d)") # 数字の直後
エスケープ文字の指定
パターン |
説明 |
例 |
\\. |
ドット (.) に一致 |
\\. はドット (.) に一致 |
\\n |
改行に一致 |
\\n は改行に一致 |
\\t |
タブ文字に一致 |
\\t はタブに一致 |
\\( |
( に一致 |
\\( は括弧に一致 |
使用例
str_detect("abc.123", "\\.") # ドットに一致
str_detect("abc\n123", "\\n") # 改行に一致
str_detect("abc\t123", "\\t") # タブに一致
str_detect("abc(123", "\\(") # 括弧に一致
正規表現を使えるR関数
base パッケージ(R標準)
関数 |
説明 |
正規表現 |
主な用途 |
grep() |
マッチした要素のインデックスを返す |
〇 (可) |
マッチする要素の位置を取得 |
grepl() |
TRUE/FALSE ベクトルを返す |
〇 (可) |
文字列がパターンに一致するかどうかを確認 |
regexpr() |
最初の一致部分の開始位置を返す |
〇 (可) |
文字列中の一致部分の開始位置を返す |
gregexpr() |
すべての一致部分の開始位置を返す |
〇 (可) |
すべての一致部分の開始位置を返す |
sub() |
最初の一致部分を置換する |
〇 (可) |
最初の一致部分を置換 |
gsub() |
すべての一致部分を置換する |
〇 (可) |
すべての一致部分を置換 |
strsplit() |
文字列を区切りで分割 |
〇 (可) |
区切り文字 (正規表現) で文字列を分割 |
regmatches() |
一致部分を抽出 |
〇 (可) |
一致部分を抽出 (regexpr, gregexpr で使用) |
stringr パッケージ
関数 |
説明 |
正規表現 |
主な用途 |
str_detect() |
TRUE/FALSE を返す |
〇 (可) |
パターンが含まれているかの確認 |
str_extract() |
最初の一致部分を抽出 |
〇 (可) |
文字列から最初の一致部分を抽出 |
str_extract_all() |
すべての一致部分を抽出 |
〇 (可) |
すべての一致部分をリストで返す |
str_replace() |
最初の一致部分を置換 |
〇 (可) |
最初の一致部分だけを置換 |
str_replace_all() |
すべての一致部分を置換 |
〇 (可) |
すべての一致部分を置換 |
str_split() |
文字列を区切りで分割 |
〇 (可) |
区切り文字 (正規表現) で分割 |
str_count() |
一致したパターンの回数をカウント |
〇 (可) |
パターンが一致した数をカウント |
str_locate() |
最初の一致部分の開始/終了位置を返す |
〇 (可) |
1つ目の一致部分の位置を返す |
str_locate_all() |
すべての一致部分の位置を返す |
〇 (可) |
すべての一致部分の位置をリストで返す |
readr パッケージ
関数 |
説明 |
正規表現 |
主な用途 |
parse_number() |
数値を抽出する |
限定的に〇 |
文字列から最初の数値を抽出 |