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 ?

Pourquoi `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` ne produit-il pas \'foo123bar\' dans les expressions régulières Python ?

DDD
DDDoriginal
2024-11-03 22:19:30787parcourir

Why does `re.sub(r'(foo)', r'23', 'foobar')` not produce

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, où « numéro » fait référence au numéro de groupe. Par exemple :

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 pour spécifier un groupe nommé. Pour les numéros de groupe, g peut être utilisé pour référencer le groupe correspondant sans ambiguïté, évitant ainsi la confusion potentielle causée par les chiffres littéraux.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn