9 つ以上の後方参照で gsub を使用するには? 以下の例の出力は「e、g、i、j、o」になると思います。
> test <- "abcdefghijklmnop"
> gsub("(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)(\\w)", "\\5, \\7, \\9, \\10, \\15", test, perl = TRUE)
[1] "e, g, i, a0, a5"
R言語の正規表現を参照してください。
\1
置換テキストの後方参照を使用して、キャプチャグループ\9
と一致するテキストを再挿入できます。全体的な一致の代わりのテキストトークンはありません。正規表現全体をキャプチャグループに配置してから、を使用します。\1
ただし、PCREを使用すると、名前付きグループを使用できるはずです。したがって、グループ化された命名と後方参照として試してください。(?P<
name
>
regex
)
(?P=
name
)
strsplit
代わりに使用してください:
test <- "abcdefghijklmnop"
strsplit(test, "")[[1]][c(5, 7, 9, 10, 15)]
\10 は、後方参照 0 の後に数字の 1 が続くものとして理解されるというのが私の理解でした。私は 9 が最大だと思います。
stringiパッケージのstri_replace_*_regex
関数には、そのような制限はありません。
library("stringi")
stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$11$12")
## [1] "jakl"
最初のキャプチャ グループを 1 で追跡する場合は、たとえば次のように使用します。
stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$1\\1$12")
## [1] "jaa1l"
この 9 回の後方参照への制限は、sub()
andgsub()
関数に固有のものであり、and などの関数には固有のものではありませんgrep()
。R での 9 つを超える後方参照のサポートは、PCRE 正規表現 (つまりperl=TRUE
引数) の使用を意味します。ただし、このオプションを使用しても、sub() および gsub() 関数はサポートしていません。
R のドキュメントは、この点について明示的です: を参照してください。 ?regexp
There can be more than 9 backreferences (but the replacement in sub can
only refer to the first 9).
さらに、この制限を回避するために名前付きキャプチャ グループを使用するというアイデアは、名前付きキャプチャ グループが sub() 関数でサポートされていないため、必ず失敗します。
regexpr and gregexpr support ‘named capture’. If groups are named,
e.g., "(?<first>[A-Z][a-z]+)" then the positions of the matches are also
returned by name. (Named backreferences are not supported by sub.)