R logo

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() 数値を抽出する 限定的に〇 文字列から最初の数値を抽出