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

DDD
Libérer: 2024-11-03 22:19:30
original
722 Les gens l'ont consulté

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')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!