質問

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"

によると このサイト, 、Back References 10から 99はいくつかの言語で動作しますが、ほとんどは機能しません。

働くと報告されているものはそうです

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.)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top