Maison > Article > développement back-end > Pourquoi `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` ne produit-il pas \'foo123bar\' dans les expressions régulières Python ?
Confusion des expressions régulières Python : substitutions avec des références arrière numérotées par groupe
Lorsque vous essayez de remplacer "foobar" par "foo123bar" à l'aide d'une expression régulière, vous pourriez rencontrer des résultats inattendus. Un remplacement comme re.sub(r'(foo)', r'1123', 'foobar') ne parvient pas à produire le résultat souhaité et renvoie à la place "J3bar".
Pour comprendre le problème, il est important de notez la distinction entre les références arrière de numéros de groupe et les chiffres littéraux. Dans ce cas, 1123 traite « 1123 » comme une chaîne littérale et non comme une référence au premier groupe de capture. Par conséquent, le remplacement ne fonctionne pas comme prévu.
Pour obtenir la substitution correcte, vous devez utiliser la syntaxe g
re.sub(r'(foo)', r'\g<1>123', 'foobar')
Dans ce cas, g<1> capture la sous-chaîne correspondant au premier groupe, qui est la chaîne "foo" de l'entrée. En utilisant la référence arrière du numéro de groupe approprié, le remplacement est effectué correctement, ce qui donne la sortie "foo123bar".
Ce comportement est expliqué dans la documentation Python, qui décrit l'utilisation de g
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!