質問
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
)
GroupDネーミング用 (?P=
name
)
背景として。
他のヒント
使用する strsplit
代わりは:
test <- "abcdefghijklmnop"
strsplit(test, "")[[1]][c(5, 7, 9, 10, 15)]
10は、1桁が1の桁で続くと理解していることを理解していました。9が最大だと思います。
stri_replace_*_regex
からの関数 stringi パッケージにはそのような制限がありません:
library("stringi")
stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$11$12")
## [1] "jakl"
1で1番目のキャプチャグループをフォローしたい場合は、EGを使用してください
stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$1\\1$12")
## [1] "jaa1l"
9回の背景へのこの制限は、に固有です sub()
と gsub()
機能ではなく機能します 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.)
所属していません StackOverflow