OVH Cloud OVH Cloud

regexp et le r

4 réponses
Avatar
Rakotomandimby (R12y) Mihamina
Bonjour,

Dans le livre "Python en concentré - Manuel de reference", ils donnet
certaines explication sur l'usage du module 're'.

Quand ils donnent des exemples de regexp, sur les 2 premiers exemples
ils mettent '<la-regexp>'. A partir du 3-eme exemple ils l'ecrivent
r'<la-regexp>' (avec le r avant). Est-ce une erreur typographique? ou
alors comment interpreter la presence/absence de ce 'r' ?

Merci d'avance.

PS: ca se passe page 161 pour ceux qui ont le livre (en Francais).
--
ASPO Infogérance - http://aspo.rktmb.org/activites/infogerance
Unofficial FAQ fcolc - http://faq.fcolc.eu.org/
Linux User Group sur Orléans et alentours.
Tél: + 33 2 38 76 43 65 (France)

4 réponses

Avatar
Roger That
Le Wed, 08 Dec 2004 19:23:10 +0100, Rakotomandimby (R12y) Mihamina a
écrit :

Quand ils donnent des exemples de regexp, sur les 2 premiers exemples ils
mettent '<la-regexp>'. A partir du 3-eme exemple ils l'ecrivent
r'<la-regexp>' (avec le r avant). Est-ce une erreur typographique? ou
alors comment interpreter la presence/absence de ce 'r' ?


Absolument pas une erreur. C'est un préfix qui permet d'utiliser une
chaîne brute (tentative de traduction de ma part de "raw string"), ce qui
fait que le caractère '' (anti-slash) sera lui même et non pas un
modificateur comme dans "n".

C'est particulièrement pratique quand tu veux déclarer un nom de fichier
sous Windows:

r"d:tototatatiti.txt"

au lieu de

"d:tototatatiti.txt"

http://www.python.org/doc/current/ref/strings.html

Avatar
Christophe Cavalaria
Roger That wrote:

Le Wed, 08 Dec 2004 19:23:10 +0100, Rakotomandimby (R12y) Mihamina a
écrit :

Quand ils donnent des exemples de regexp, sur les 2 premiers exemples ils
mettent '<la-regexp>'. A partir du 3-eme exemple ils l'ecrivent
r'<la-regexp>' (avec le r avant). Est-ce une erreur typographique? ou
alors comment interpreter la presence/absence de ce 'r' ?


Absolument pas une erreur. C'est un préfix qui permet d'utiliser une
chaîne brute (tentative de traduction de ma part de "raw string"), ce qui
fait que le caractère '' (anti-slash) sera lui même et non pas un
modificateur comme dans "n".

C'est particulièrement pratique quand tu veux déclarer un nom de fichier
sous Windows:

r"d:tototatatiti.txt"

au lieu de

"d:tototatatiti.txt"

http://www.python.org/doc/current/ref/strings.html


Attention aux pièges du modificateur r ! r ne veux pas dire ici raw mais
bien regexp si je ne me trompe pas. En particulier, il ne faut pas mettre
un nombre impair de avant de fermer la chaine :

r't' = ok
r't' = pas ok

La raison pour laquelle r veux plus-tot dire regexp c'est qu'il ne peux pas
y avoir d' à la fin d'une regexp il me semble.


Avatar
Eric Brunel
Christophe Cavalaria wrote:
[snip]
Attention aux pièges du modificateur r ! r ne veux pas dire ici raw mais
bien regexp si je ne me trompe pas.


Tu te trompes: le préfixe r veut bien dire "raw"; lis le passage correspondant
dans http://www.python.org/doc/current/ref/strings.html

Il arrive d'ailleurs souvent sur c.l.py que l'on explique longuement aux petits
nouveaux que le préfixe r devant les chaines veut bien dire raw, et pas regexp...

En particulier, il ne faut pas mettre
un nombre impair de avant de fermer la chaine :

r't' = ok
r't' = pas ok

La raison pour laquelle r veux plus-tot dire regexp c'est qu'il ne peux pas
y avoir d' à la fin d'une regexp il me semble.


Non; si j'ai bien retenu ce que j'ai lu, c'est un simple problème avec le parser
Python qui prend toujours le pour un caractère d'échappement dans " et '.
Donc """ est valide (et fait une chaine de deux caractères, et "), mais ""
ne l'est pas (ça fait une double-quote, un backslash, une double-quote
"échappée", et il manque la double-quote de fin de chaine).

HTH
--
- Eric Brunel <eric (underscore) brunel (at) despammed (dot) com> -
PragmaDev : Real Time Software Development Tools - http://www.pragmadev.com

Avatar
Tibi
On Fri, 10 Dec 2004 09:49:08 +0100, Eric Brunel
wrote:

Non; si j'ai bien retenu ce que j'ai lu, c'est un simple problème avec
le parser Python qui prend toujours le pour un caractère d'échappement
dans " et '. Donc """ est valide (et fait une chaine de deux
caractères, et "), mais "" ne l'est pas (ça fait une double-quote, un


Ce n'est pas un problème, il faut bien qu'il puisse décider comment
interpréter par exemple:
r'hello' # world'
soit la chaîne "hello' # world" comme c'est le cas actuellement, soit
"hello" suivit du commentaire "# world'"