94 votes

python et d'expression régulière avec unicode

J'ai besoin de supprimer certains symboles unicode à partir de la chaîne 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ'

Je sais qu'ils existent ici, pour sûr. J'ai essayer:

re.sub('([\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+)', '', 'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ')

mais ça ne fonctionne pas. La chaîne reste la même. ant suggestion que je fais de mal?

110voto

ʞɔıu Points 15907

Êtes-vous à l'aide de python 2.x ou 3.0?

Si vous utilisez 2.x, essayez de faire la regex chaîne de caractères unicode-échapper à la chaîne, avec un "u". Puisque c'est regex c'est une bonne pratique pour faire de votre regex chaîne une chaîne brute, avec des "r". En outre, en mettant l'ensemble de votre modèle entre parenthèses est superflu.

re.sub(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', '', ...)

http://docs.python.org/tutorial/introduction.html#unicode-strings

Edit:

C'est aussi une bonne pratique de l'utilisation de la ré.UNICODE/re.U/(?u) drapeau de l'unicode regexes, mais il ne touche que le caractère de classe des alias comme \w \b, ce modèle n'utilise pas et donc ne serait pas touché par.

79voto

nosklo Points 75862

L'utilisation de l'unicode des chaînes de caractères. Utilisez les ré.UNICODE drapeau.

>>> myre = re.compile(ur'[\u064B-\u0652\u06D4\u0670\u0674\u06D5-\u06ED]+', 
                      re.UNICODE)
>>> myre
<_sre.SRE_Pattern object at 0xb20b378>
>>> mystr = u'بِسْمِ اللَّهِ الرَّحْمَٰنِ الرَّحِيمِ'
>>> result = myre.sub('', mystr)
>>> len(mystr), len(result)
(38, 22)
>>> print result
بسم الله الرحمن الرحيم

Lire l'article de Joel Spolsky appelé Le Minimum Absolu que Tout Développeur Doit Absolument, Positivement Savoir Sur Unicode et les Jeux de Caractères (Pas d'Excuses!)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X