R×stringr::str_match_all 一致した文字列の中から特定のグループだけをすべて抽出する

R言語のstringrパッケージに含まれているstr_match_all()関数について解説します。この関数は、「文字列から正規表現にマッチするすべての部分を見つけ、さらにカッコ ( ) で指定したグループ(サブパターン)ごとに分解して抽出したい」ときに使える関数です。テキスト内に複数含まれる特定のパターンから、データとして欲しい部分だけをまとめて抽出するのに便利です。

stringrパッケージは、文字列データを操作するための強力で便利な関数を多く取り扱っています。また、Rのデータサイエンス向け主要パッケージ群であるtidyverseパッケージにも含まれています。

概要

str_match_all()は、一致した文字列の中から特定のグループだけをすべて抽出するための関数です。名前なしの(パターン)キャプチャグループ、および名前付き(?パターン)キャプチャグループで定義された任意の数の一致を抽出します。デフォルトの演算の優先順位をオーバーライドする必要があり、結果をキャプチャしたくない場合は、非キャプチャグループ (?:パターン) を使用します。

使い方


str_match_all(string, pattern)

引数

string

文字ベクトルまたは文字ベクトルに変換可能なものを指定します。

pattern

正規表現を指定します。
パターンには少なくとも1つのキャプチャグループを含める必要があります。

戻り値

文字列/パターンと同じ長さのリストで、文字行列が含まれます。各行列は上記の列を持ち、各一致ごとに1行が保持されます。

使用例

準備

あらかじめ、tidyverseパッケージまたはstringrパッケージを読み込んでおきます。


# library(tidyverse)でもよい
library(stringr)

一致した文字列の中から特定のグループだけをすべて抽出する

文字列「あいうえお|あいうえお」と「かきくけこ」で、「う」が含まれる文字列に対して、「う」の前後一文字をすべて抽出するには次のようにします。


str_match_all(c("あいうえお|あいうえお", "かきくけこ"), "(.)う(.)")

[[1]]
     [,1]     [,2] [,3]
[1,] "いうえ" "い" "え"
[2,] "いうえ" "い" "え"

[[2]]
     [,1] [,2] [,3]

参考文献