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.)