11
votes

Plus de 9 braires dans GSub ()

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"


0 commentaires

6 Réponses :


3
votes

Je crois comprendre que \ 10 serions compris comme une contreference 0 suivie d'un chiffre de 1. Je pense que 9 est le max.


0 commentaires

1
votes

selon Ce site , les références arrière \ 10 à \ 99 fonctionne sur certains langues, mais pas la plupart.

ceux qui sont signalés au travail sont


0 commentaires

9
votes

voir Expressions régulières avec la langue R :

Vous pouvez utiliser les referférences \ 1 via \ 9 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 .

Mais avec PCRE, vous devriez pouvoir utiliser Nommé Groupes . Donc essayez (? P << / code> nom > regex ) pour groupd nommage et (? p = nom comme contreference.


0 commentaires

4
votes

Utiliser strpsplit à la place: xxx


0 commentaires

2
votes

Le stri_replace _ * _ REGEX CODE> Fonctions à partir du StringI Package n'a pas de telles limitations: xxx pré>

Si vous souhaitez suivre le 1er groupe de capture avec 1, utilisez par exemple P>

stri_replace_all_regex("abcdefghijkl", "(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)", "$10$1$1\\1$12")
## [1] "jaa1l"


0 commentaires

0
votes

Cette limitation à 9 backresferences est spécifique au 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.

La documentation R est explicite sur ce point: voir ? 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.)


0 commentaires