Comment utiliser les caractères Unicode dans les expressions régulières

Vous utilisez des expressions régulières pour traiter du texte, mais vous êtes concerné par la gestion des caractères Unicode. Cet article est pour vous.

Par défaut, le module Python re est déjà programmé avec une connaissance élémentaire de certaines classes de caractères Unicode. Par exemple, \d correspond déjà à n’importe quel caractère unicode:

>>> import re

>>> num = re.compile('\d+')

>>> # chiffres ASCII
>>> num.match('123')
<re.Match object; span=(0, 3), match='123'>

>>> # Chiffres arabes
>>> num.match('\u0661\u0662\u0663')
<re.Match object; span=(0, 3), match='١٢٣'>

>>>

 

Si vous avez besoin d’inclure des caractères Unicode spécifiques dans des motifs de texte, vous pouvez utiliser la séquence d’échappement habituelle pour les caractères Unicode (par exemple, \uFFFF ou \UFFFFFFF).

Par exemple, voici une expression régulière qui correspond à tous les caractères dans quelques différentes pages de code arabe:

>>> arabic = re.compile('[\u0600-\u06ff\u0750-\u077f\u08a0-\u08ff]+')
>>>

 

Lorsque vous effectuez des opérations de recherche et d’appariement, il est conseillé de normaliser et éventuellement de convertir d’abord tout le texte à un formulaire standard.

Cependant, il est également important d’être conscient des cas particuliers. Par exemple, considérez le comportement de l’appariement insensible à la casse combiné avec le pliage de casse (case folding en anglais):

>>> pat = re.compile('stra\u00dfe', re.IGNORECASE)
>>> s = 'straße'
>>> pat.match(s) # Appariements
<_sre.SRE_Match object at 0x10069d370>
>>> pat.match(s.upper()) # Ça ne correspond pas
>>> s.upper() # Pliage de casse
'STRASSE'
>>>

 

Mélanger les caractères Unicode et expressions régulières est souvent un bon moyen de casser votre tête. Si vous voulez le faire sérieusement, vous devriez envisager d’installer la bibliothèque regex, qui offre une prise en charge complète du pliage de casse Unicode, ainsi qu’une variété de fonctions intéressantes, y compris l’appariement approximatif.

LAISSER UN COMMENTAIRE

Please enter your comment!
Please enter your name here