Comment faire des sous-groupes avec des groupes et des variables correspondants en Python
python. C'est sans doute simple, mais je n'ai pas trouvé de réponse.
rndStr = "20101215"
rndStr2 = "20101216"
str = "Looking at dates between 20110316 and 20110317"
outstr = re.sub("(.+)([0-9]{8})(.+)([0-9]{8})",r''+rndStr+r''+rndStr2,str)
La sortie, je suis à la recherche de:
Looking at dates between 20101215 and 20101216
Mais à la place j'obtiens:
P101215101216
Les valeurs des deux rndStr n'a pas vraiment d'importance. Assumer ses aléatoire ou à partir de la saisie de l'utilisateur (j'ai mis statique vals ici, pour faire simple). Merci pour toute aide.
source d'informationauteur Syed H
Vous devez vous connecter pour publier un commentaire.
Vos références arrières sont ambigus. Votre chaîne de remplacement devient
qui est deux assez grand nombre pour être backreferencing 🙂
Pour résoudre ce problème, utilisez cette syntaxe:
Vous aussi vous avez trop de jeux de parenthèses (ou "supports" si vous parlez l'anglais Britannique comme moi: -) - vous n'avez pas besoin de parenthèses autour de la
[0-9]{8}
pièces qui vous n'êtes pas backreferencing:devrait être suffisant.
(Et, comme nous l'avons noté ailleurs, n'utilisez pas de
str
comme un nom de variable. Sauf si vous voulez passer les âges de débogage pourquoistr.replace()
ne fonctionne plus. Non pas que j'ai jamais fait qu'une fois... noooon. 🙂donc toute la chose devient:
Production:
Avis si vous modifiez la valeur de
rndStr
ourndStr2
de texte (comme "abc") plutôt que des chiffres, vous obtenez quelque chose de plus proche du résultat attendu?Dans votre expression de
re.sub
vous avezr'\1'+rndStr+...
Cette combine en'\1'+'20101215'
qui essaie ensuite de référence de la référence de retour de\120101215
qui n'est probablement pas ce que vous avez voulu...Vous pouvez utiliser nommé références arrière pour faire le dos de référence sans ambiguïté:
Mieux encore, utiliser un plus facile de comprendre la syntaxe et de vérifier le retour de la tentative de mise en correspondance:
Dans les deux cas, votre chaîne souhaitée de
Looking at dates between 20101215 and 20101216
est produit.Le Python docs sur nommé références arrières:
(?P<name>...)
S'il vous plaît ne pas utiliser
str
comme un nom de variable; il remplace le haut-str
type.