python, regex, unicode [résolu]

python, regex, unicode [résolu] - Python - Programmation

Marsh Posté le 04-09-2012 à 15:50:21    

Bonjour à tous,  
j'ai un bout de code en Python 3 qui lit des chaînes du type "(c,c,c)" où c représente un caractère choisi parmi (a,b,ë,ɪ̈ ). Pour parser la chaîne src je pensais à quelque chose comme ça :

Code :
  1. src="(a,b,ɪ̈)"
  2. pattern = "[abëɪ̈]"
  3. for r in re.finditer( '\({0},{0},{0}\)'.format(pattern), src ):
  4.     print( r.group() )


Mais la regex n'aime pas mon "ɪ̈ " que Python décompose en effet en deux charactères (ɪ + diérèse) : (a,b,ɪ̈) n'est pas reconnu par la regex. Je n'ai pas le même problème avec ë que Python décompose en un seul caractère : de fait, (a,b,ë) est correctement reconnu. J'ai essayé de forcer une normalisation à coups de unicodedata.normalize('NFD', ...) appliqués à src et à pattern, sans succès.
 
Comment puis-je contourner ce problème ? Merci d'avance !
 
PS : même problème avec Python 2

Message cité 1 fois
Message édité par suizokukan le 05-09-2012 à 14:41:09

---------------
rule #1 : trust the python
Reply

Marsh Posté le 04-09-2012 à 15:50:21   

Reply

Marsh Posté le 04-09-2012 à 18:45:06    

Problème avec le format du regex : http://stackoverflow.com/questions [...] diacritics .
 
Merci à ceux qui m'ont lu !


---------------
rule #1 : trust the python
Reply

Marsh Posté le 05-09-2012 à 11:27:14    

suizokukan a écrit :

Mais la regex n'aime pas mon "ɪ̈ " que Python décompose en effet en deux charactères (ɪ + diérèse) : (a,b,ɪ̈) n'est pas reconnu par la regex.[...] J'ai essayé de forcer une normalisation à coups de unicodedata.normalize('NFD', ...) appliqués à src et à pattern, sans succès.


Notes que c'est pas Python hein, il n'y a pas de codepoint pour la combinaison de ɪ et ¨, tu peux bien essayer autant que tu veux ça ne peut être exprimé que par {LATIN LETTER SMALL CAPITAL I} {COMBINING DIAERESIS}.
 
Pour le problème même, tu as rapporté le cas sur le bug tracker? C'est pas indiqué clairement, mais apparemment re n'a pas de support pour http://unicode.org/reports/tr18/ et fait donc tout son matching sur codepoints, pas sur grapheme clusters. Faudrait au moins que ce soit noté, truc du style


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 05-09-2012 à 14:25:10    

Merci Masklinn d'avoir lu mon message. Incriminer Python n'était pas précis de ma part et relevait en effet d'un abus de langage. Je vais suivre ton conseil et alerter le bug tracker de Python. Merci pour les termes techniques (codepoint, grapheme clusters) que je ne connaissais pas.


---------------
rule #1 : trust the python
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed