Maison >développement back-end >Tutoriel Python >Pourquoi les limites des mots d'expression régulière (\b) se comportent-elles mal avec les caractères spéciaux ?

Pourquoi les limites des mots d'expression régulière (\b) se comportent-elles mal avec les caractères spéciaux ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-09 05:26:17616parcourir

Why Do Regular Expression Word Boundaries (b) Misbehave with Special Characters?

Comportement des limites de mots pour les expressions comportant des caractères spéciaux

Lors de l'utilisation d'expressions régulières pour faire correspondre des mots, le modèle de limite b peut parfois produire des résultats inattendus, en particulier lorsque le mot contient des caractères spéciaux. caractères.

Considérez l'expression "test Sortesindex[persons]{Sortes} text." Faire correspondre la phrase complète à l'aide de bb devrait empêcher les correspondances sur des expressions telles que "Sortes" seules. Cependant, cela ne se produit pas en raison de certaines caractéristiques des limites des mots.

b Comportement avec les caractères spéciaux

Formellement, b correspond à la limite entre un caractère de mot (w) et un caractère autre qu'un mot. (W), ou le début/fin de la chaîne. Lorsque le modèle de limite de mot est immédiatement suivi d'un caractère spécial tel que [ ou }, le b nécessite uniquement un caractère de mot après le caractère spécial.

Solution : limites de mots adaptatives ou sans ambiguïté

Pour résoudre ce problème, des limites de mots adaptatives ou des limites de mots sans ambiguïté peuvent être utilisées.

Les limites de mots adaptatives gèrent n'importe quelle combinaison de Caractères de mots et non-mots de chaque côté du motif :

re.search(r'(?:(?!\w)|\b(?=\w)){}(?:(?<=\w)\b|(?<!\w))'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')

Les limites de mots sans ambiguïté ne nécessitent aucun caractère de mot de chaque côté du motif :

re.search(r'(?<!\w){}(?!\w)'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')

Choisir le bon type de limite

Les limites de mots adaptatives sont plus polyvalentes mais autorisent les caractères non-mots de début et de fin. Les limites de mots sans ambiguïté sont plus strictes, garantissant l'absence de caractères de mots environnants.

Personnalisation

Les modèles de recherche utilisés pour les limites de mots adaptatives et sans ambiguïté peuvent être personnalisés en fonction des exigences spécifiques de la tâche de correspondance. Par exemple, pour faire correspondre uniquement les non-lettres autour du motif, utilisez [^Wd_] au lieu de w.

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