1. ホーム
  2. regex

[解決済み] Rでの複数capture-groupsを用いた正規表現グループキャプチャ

2023-01-21 02:50:51

質問

Rでは、正規表現のマッチからグループキャプチャを抽出することは可能でしょうか? 私の知る限りでは、どの grep , grepl , regexpr , gregexpr , sub または gsub はグループキャプチャを返します。

このようにエンコードされた文字列からキーと値のペアを抽出する必要があります。

\((.*?) :: (0\.[0-9]+)\)

フルマッチのgrepを複数回行うとか、外部(R以外)の処理を行うことはいつでもできるのですが、全てRの中でできればと思っていました。これを行うための関数やそのような機能を提供するパッケージはありますか?

どのように解決するのですか?

str_match() から stringr パッケージの これは、マッチの各グループに対して1列(とマッチ全体に対して1列)ある文字行列を返します。

> s = c("(sometext :: 0.1231313213)", "(moretext :: 0.111222)")
> str_match(s, "\\((.*?) :: (0\\.[0-9]+)\\)")
     [,1]                         [,2]       [,3]          
[1,] "(sometext :: 0.1231313213)" "sometext" "0.1231313213"
[2,] "(moretext :: 0.111222)"     "moretext" "0.111222"