OVH Cloud OVH Cloud

expressions régulières et accents

6 réponses
Avatar
Ellen Herzfeld
Je débute en Python sur Mac OSX.

Mon problème est le suivant :
Je voudrais utiliser des expressions régulières pour faire des
modifications dans des textes en français, donc avec des accents.

J'ai fouillé dans de multiples docs et sur le site python.org mais je
n'arrive pas à mes fins.

J'ai essayé locale.setlocale avec UTF-8 et avec iso-8859-1 sans succès.

Le petit programme test suivant ne me trouve jamais "père" comme mot,
mais uniquement "p" si j'omets re.L. Avec re.L il me trouve un
caractère de plus, mais qui n'est pas reconnu comme de l'unicode. De
toute façon, ce que je veux, c'est qu'il reconnaisse le mot en
entier...

f1 = re.search(r'\w+', 'père', re.L)
temp = open('temp.txt', 'a')
temp.write(f1.group())
temp.close()

Merci.

Ellen

--
-------------------------------------------------------------------
xlii@xlii.supprimer.org | Ellen C. Herzfeld
http://www.quarante-deux.org/ | Dominique O. Martel
Quelques pages sur la Science-Fiction | Quarante-Deux
-------------------------------------------------------------------

6 réponses

Avatar
Riccardo Attilio Galli
On Sat, 10 Jul 2004 18:45:51 +0200, Ellen Herzfeld wrote:

f1 = re.search(r'w+', 'père', re.L)


il semble marcher comme-ci:

re.search(r'w+', 'père',re.U).group()
'pxe8re'




Ciao,
Riccardo

--
-=Riccardo Galli=-

_,e.
s~ ``
~@. ideralis Programs
. ol
`**~ http://www.sideralis.net



Avatar
Ellen Herzfeld
In article ,
Riccardo Attilio Galli wrote:

re.search(r'w+', 'père',re.U).group()
'pxe8re'


Chez moi ça ne marche pas. Ici je récupère 'pxc3'.

Ellen

--
| Ellen C. Herzfeld
http://www.quarante-deux.org/ | Dominique O. Martel
Quelques pages sur la Science-Fiction | Quarante-Deux

Avatar
LioneL
bonjour,

Je débute en Python sur Mac OSX.


je suis sous windows98 et python 2.3

f1 = re.search(r'w+', 'père', re.L)


avec idle :
import re
re.search(r'w+', 'père', re.L).group()
'pxe8re'




dans un terminal 'DOS':
import re
re.search(r'w+', 'père', re.L).group()
'p'



re.search(r'w+', unicode('père','cp850'), re.L).group()
u'p'



re.search(r'w+', unicode('père','cp850'), re.U).group()
u'pxe8re'




donc c'est typique d'un codage de caractères.

LioneL
--
Python facile : http://lionel.grolleau.free.fr/
Les ressources (liens) en français sur Python.
Python et l'unicode.
Comment afficher les caractères accentués dans un terminal 'DOS'.



Avatar
Gilles Lenfant

Je débute en Python sur Mac OSX.

Mon problème est le suivant :
Je voudrais utiliser des expressions régulières pour faire des
modifications dans des textes en français, donc avec des accents.

J'ai fouillé dans de multiples docs et sur le site python.org mais je
n'arrive pas à mes fins.

J'ai essayé locale.setlocale avec UTF-8 et avec iso-8859-1 sans succès.

Le petit programme test suivant ne me trouve jamais "père" comme mot,
mais uniquement "p" si j'omets re.L. Avec re.L il me trouve un
caractère de plus, mais qui n'est pas reconnu comme de l'unicode. De
toute façon, ce que je veux, c'est qu'il reconnaisse le mot en
entier...

f1 = re.search(r'w+', 'père', re.L)
temp = open('temp.txt', 'a')
temp.write(f1.group())
temp.close()

Merci.

Ellen



Tu n'as certainement pas dû utiliser la bonne locale. Voir la doc de
MacOSX, et celle du package locale pour ceci.

re.search((r'w+', 'père', re.L).group()
'p'



import locale
# Si Windows XP
locale.setlocale(locale.LC_ALL, '')
# Si FreeBSD (assez proche MacOSX)
locale.seltlocale(locale.LC_ALL, 'fr_FR.ISO8859-15')
re.search((r'w+', 'père', re.L).group()
'pxe8re'




Dans FreeBSD, les locales disponibles sont stockées dans
/usr/share/locale. MacOSX qui a un noyau BSD doit avoir un répertoire de
locales similaire.

Voilà...

--
Gilles



Avatar
Ellen Herzfeld
In article <40f2927b$0$9682$, Gilles Lenfant
wrote:

Tu n'as certainement pas dû utiliser la bonne locale. Voir la doc de
MacOSX, et celle du package locale pour ceci.


J'ai réussi dans le conditions suivantes, résultats d'essais multiples :

#sitecustomize.py
import sys, locale
sys.setdefaultencoding('utf-8')


locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
re.search(r'w+', u'p303re', re.L).group()
u'pxc3re'

Ça ne marche ni avec fr_FR.ISO8859-15, ni avec fr_FR.ISO8859-1.

Curieusement, seul le premier byte du caractère unicode apparaît, mais
si j'écris le résultat dans un fichier sur le disque, et que je l'ouvre
avec un éditeur qui connaît l'unicode, j'ai bien le mot "père". Donc,
en principe c'est bon.

Maintenant je m'attaque à un autre problème de locale, le tri...

A bientôt.

Ellen

--
-------------------------------------------------------------------
| Ellen C. Herzfeld
http://www.quarante-deux.org/ | Dominique O. Martel
Quelques pages sur la Science-Fiction | Quarante-Deux
-------------------------------------------------------------------

Avatar
Ellen Herzfeld
In article <120720041949127537%, Ellen Herzfeld
wrote:

Curieusement, seul le premier byte du caractère unicode apparaît,


Correction à mon message précédent :

En fait, une partie du problème venait du terminal qui, quand on tape
un caractère accentué en mode Python interactif, le transcode de façon
bizarre. D'où le 303 à la place du e accent grave, qui ne veut
strictement rien dire. Il faut taper le caractère unicode et non le
caractère accentué. Et il semble qu'il faille utiliser les code utf-16
et non utf-8.

Après correction, je trouve ceci:

Sans modifier la locale (par défaut à C), ça marche:

import re
re.search(r'w+', u'pxe8re', re.U).group()
u'pxe8re'




En modifiant la locale:

import re, locale
locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8')
'fr_FR.UTF-8'



re.search(r'w+', u'pxe8re', re.L).group()
u'pxe8re'




Je préfère utiliser UTF-8 plutôt que iso8859-1 ou même iso8859-15 car
ces deux encodages ne contiennent pas tous les caractères dont j'ai
besoin.

Pour écrire le résultat dans un fichier c'est pareil, soit avec re.U
soit avec re.L, mais il faut aussi modifier l'encodage dans
sitecustomize.py, sinon j'ai une erreur :

UnicodeEncodeError: 'ascii' codec can't encode character 'ue8' in
position 1: ordinal not in range(128)

Ellen

--
-------------------------------------------------------------------
| Ellen C. Herzfeld
http://www.quarante-deux.org/ | Dominique O. Martel
Quelques pages sur la Science-Fiction | Quarante-Deux
-------------------------------------------------------------------