R言語で、指定した文字列に一致する開始位置と終了位置を取得する方法について解説します。文字列の操作には、tidyverseパッケージに含まれているstringrパッケージを使用するのが便利です。ここでは、stringrパッケージのstr_locate()、str_locate_all()を使用した方法についてお伝えします。

str_locate()の概要

str_locate()は、指定した文字列に最初に一致した開始位置と終了位置を取得するための関数です。

str_locate()の使い方

stringr::str_locate()の使い方は次になります。


str_locate(string, pattern)

str_locate()の引数の意味

string

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

pattern

検索するパターンを指定します。
デフォルトの解釈は、正規表現です。 一致動作をより細かく制御するには、regex()を使用します。fixed()を使用して、固定文字列(つまり、バイトのみを比較する)を一致させます。 これは高速ですが、近似値です。一般に、人間のテキストを一致させるには、指定されたロケールの文字一致ルールを尊重するcoll()が必要になります。boundary()を使用して、文字、単語、行、文の境界を一致させます。空のパターン””は、boundary(“character”)と同等です。

str_locate_all()の概要

str_locate_all()は、指定した文字列に一致したすべての開始位置と終了位置を取得するための関数です。

str_locate_all()の使い方

stringr::str_locate_all()の使い方は次になります。


str_locate_all(string, pattern)

str_locate_all()の引数の意味

string

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

pattern

検索するパターンを指定します。
デフォルトの解釈は、正規表現です。一致動作をより細かく制御するには、regex()を使用します。fixed()を使用して、固定文字列(つまり、バイトのみを比較する)を一致させます。これは高速ですが、近似値です。一般に、人間のテキストを一致させるには、指定されたロケールの文字一致ルールを尊重するcoll()が必要になります。boundary()を使用して、文字、単語、行、文の境界を一致させます。空のパターン””は、boundary(“character”)と同等です。

準備

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


library(tidyverse)

解説のために、次の文字列を使用します。


s <- "So many men, so many minds."

str_locate()の使用例

文字列sで、「many」に最初に一致する開始位置と終了位置を取得するには次のようにします。


str_locate(s, "many")

     start end
[1,]     4   7

str_locate_all()の使用例

文字列sで、「many」に一致するすべての開始位置と終了位置を取得するには次のようにします。


str_locate_all(s, "many")

     start end
[1,]     4   7
[2,]    17  20
R×stringr::str_locate 指定した文字列に一致する開始位置と終了位置を取得する