Comment utiliser GSUB avec plus de 9 backresferences? Je m'attendrais à ce que la production dans l'exemple ci-dessous soit "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"
6 Réponses :
Je crois comprendre que \ 10 serions compris comme une contreference 0 suivie d'un chiffre de 1. Je pense que 9 est le max. P>
selon Ce site , les références arrière \ 10 à \ 99 fonctionne sur certains langues, mais pas la plupart. p>
ceux qui sont signalés au travail sont p>
voir Expressions régulières avec la langue R : P>
Vous pouvez utiliser les referférences
\ 1 code> via\ 9 code> dans le texte de remplacement pour réinsérer le texte correspondé par un groupe de capture . Il n'y a pas de jeton de texte de remplacement pour la correspondance globale. Placez l'ensemble du regex dans un groupe de capture, puis utilisez\ 1 code>. P> blockQuote>Mais avec PCRE, vous devriez pouvoir utiliser Nommé Groupes . Donc essayez
(? P << / code>nom code> em>> code>regex code> em >) code> pour groupd nommage et(? p = code>nom code> em>comme contreference. p>
Utiliser strpsplit code> à la place:
Le Si vous souhaitez suivre le 1er groupe de capture avec 1, utilisez par exemple P> stri_replace _ * _ REGEX CODE> Fonctions à partir du StringI Package n'a pas de telles limitations: stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$1\\1$12")
## [1] "jaa1l"
Cette limitation à 9 backresferences est spécifique au La documentation R est explicite sur ce point: voir Sub () code> et gsub () code> fonctions, pas pour fonctionner comme grep () code> et le comme. Prise en charge de plus de 9 backresferences dans R implique d'utiliser une expression régulière PCRE (c'est-à-dire le perl = true code> argument); Cependant, même avec cette option, les fonctions SUB () et GSUB () ne le supportent pas. ? REGEXP CODE> P> 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.)