検索したところ、重複一致の効果を達成するためのこのフォーラム ディスカッションを見つけることができました。
また、このタスクを実行するためのインデックスを見つけることについて話している次のSOの質問も見つけましたが、R 言語で重複する一致を取得することについて簡潔なものを見つけることができませんでした。
このタスクは、( PCRE )をサポートするほとんどすべての言語で実行できます。正の先読みアサーションを使用し、先読み内にキャプチャ グループを実装して重複した一致をキャプチャします。
しかし、実際に他の言語と同じようにperl=T
R を使用してこれを実行しても、結果は得られません。
> x <- 'ACCACCACCAC'
> regmatches(x, gregexpr('(?=([AC]C))', x, perl=T))[[1]]
[1] "" "" "" "" "" "" ""
stringi
とstringr
パッケージの両方を使用する場合も同様です。
> library(stringi)
> library(stringr)
> stri_extract_all_regex(x, '(?=([AC]C))')[[1]]
[1] "" "" "" "" "" "" ""
> str_extract_all(x, perl('(?=([AC]C))'))[[1]]
[1] "" "" "" "" "" "" ""
これを実行したときに返される正しい結果は次のとおりです。
[1] "AC" "CC" "AC" "CC" "AC" "CC" "AC"
編集
regmatches
キャプチャされた一致でうまく機能しないことはよく知っていますが、regmatch でこの動作が発生する正確な原因と、結果が返されないのはなぜですか? やや詳細な回答を探しています。stringi
andstringr
パッケージはこれを実行できませんかregmatches
?私の回答に自由に追加するか、私が見つけたものとは異なる回避策を考え出してください。