Maison > développement back-end > Tutoriel Python > Comment les expressions régulières peuvent-elles faire correspondre efficacement des mots entiers dans des chaînes ?

Comment les expressions régulières peuvent-elles faire correspondre efficacement des mots entiers dans des chaînes ?

Barbara Streisand
Libérer: 2024-11-19 03:53:02
original
697 Les gens l'ont consulté

How Can Regular Expressions Efficiently Match Whole Words in Strings?

Faire correspondre dynamiquement des mots entiers dans des chaînes à l'aide d'expressions régulières

Pour déterminer si un mot existe dans une phrase, des expressions régulières peuvent être utilisées. Étant donné que les mots sont généralement séparés par des espaces mais peuvent avoir une ponctuation de chaque côté, il est essentiel d'éviter les correspondances partielles de mots.

Une approche consiste à définir des modèles d'expression régulière distincts pour les mots apparaissant au milieu, au début et à la fin de la chaîne comme suit :

match_middle_words = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_starting_word = "^[^a-zA-Z\d]{0,}" + word + "[^a-zA-Z\d ]{0,} "
match_end_word = " [^a-zA-Z\d ]{0,}" + word + "[^a-zA-Z\d]{0,}$"
Copier après la connexion

Cependant, cela nécessite de définir et de combiner plusieurs modèles d'expression régulière. Une approche plus simplifiée consiste à exploiter les limites des mots (b) :

match_string = r'\b' + word + r'\b'
Copier après la connexion

Ce modèle garantit que le mot n'est capturé que lorsqu'il est entouré de caractères autres que des mots. Pour une liste de mots (par exemple, dans la variable « mots »), utilisez :

match_string = r'\b(?:{})\b'.format('|'.join(words))
Copier après la connexion

Cette méthode garantit efficacement la capture de mots entiers sans nécessiter plusieurs modèles.

Remarque sur les limites des mots

Pour les scénarios plus complexes impliquant des mots avec des caractères spéciaux ou dans lesquels les limites des mots diffèrent des espaces, des définitions de limites alternatives peuvent être utilisées. Les limites de mots sans ambiguïté excluent les mots qui commencent/se terminent par des caractères spéciaux :

match_string = r'(?<!\w){}(?!\w)'.format(re.escape(word))
Copier après la connexion

Les limites d'espaces considèrent les espaces et le début/la fin des chaînes comme des limites de mots :

match_string = r'(?<!\S){}(?!\S)'.format(word)
Copier après la connexion

En utilisant ces techniques, la correspondance des mots entiers dans des chaînes peuvent être simplifiés, garantissant des résultats précis et cohérents.

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal