Ecrire des caractères spéciaux à l'écran (ex: n)

Le
Kevin Denis
Bonjour,

j'utilise des regexp dans un programme, et je souhaiterais en afficher
certaines à l'écran. Mais des caractères spéciaux me posent problème.

Par exemple:
ma_regexp = '[^:/]{1,63}'
print "regexp is: " + ma_regexp

Sauf que cela m'affiche:
regexp is: [^:/
]{1,63}

J'aurai préféré voir:
regexp is: [^:/]{1,63}

Il y a un moyen simple d'afficher comme ça?

Merci
--
Kevin
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
YBM
Le #26304445
Le 26/08/2014 12:03, Kevin Denis a écrit :
Bonjour,

j'utilise des regexp dans un programme, et je souhaiterais en afficher
certaines à l'écran. Mais des caractères spéciaux me posent problème.

Par exemple:
ma_regexp = '[^:/n]{1,63}'
print "regexp is: " + ma_regexp

Sauf que cela m'affiche:
regexp is: [^:/
]{1,63}

J'aurai préféré voir:
regexp is: [^:/n]{1,63}
Il y a un moyen simple d'afficher comme ça?

print "regexp is: " + repr(ma_regexp)






regexp is: '[^:/n]{1,63}'
print "regexp is: " + repr(ma_regexp).replace("'","")






regexp is: [^:/n]{1,63}

Merci



de rien.
Alain Ketterlin
Le #26304481
YBM
Le 26/08/2014 12:03, Kevin Denis a écrit :

j'utilise des regexp dans un programme, et je souhaiterais en afficher
certaines à l'écran. Mais des caractères spéciaux me posent problème.

print "regexp is: " + repr(ma_regexp)






regexp is: '[^:/n]{1,63}'
print "regexp is: " + repr(ma_regexp).replace("'","")






regexp is: [^:/n]{1,63}



repr(re)[1:-1] est sûrement préférable (si la re est "x'y" r epr()
utilisera des double quotes, et le replace() renverra quelque chose de
bizarre).

-- Alain.
Kevin Denis
Le #26304669
Le 26-08-2014, Alain Ketterlin
j'utilise des regexp dans un programme, et je souhaiterais en afficher
certaines à l'écran. Mais des caractères spéciaux me posent problème.





print "regexp is: " + repr(ma_regexp)






regexp is: '[^:/n]{1,63}'
print "regexp is: " + repr(ma_regexp).replace("'","")






regexp is: [^:/n]{1,63}





Je ne connaissais pas repr, c'est intéressant. Mais je bute sur un
autre problème:
In [3]: print(repr('abcndr'))
'abcndr' <--- parfait

In [4]: print(repr('abcndr\'))
'abcndr\' <--- parfait

In [5]: print(repr('abcndrW'))
'abcndr\W' <--- doublement du backslash ?

In [6]: print(repr('abcndrWd\'))
'abcndr\W\d\' <--- un mélange de doublement et de non doublement

repr(re)[1:-1] est sûrement préférable (si la re est "x'y" repr()
utilisera des double quotes, et le replace() renverra quelque chose de
bizarre).



Bien vu.
--
Kevin
Alain Ketterlin
Le #26304723
Kevin Denis
Le 26-08-2014, Alain Ketterlin
j'utilise des regexp dans un programme, et je souhaiterais en afficher
certaines à l'écran. Mais des caractères spéciaux me posent problème.





print "regexp is: " + repr(ma_regexp)






regexp is: '[^:/n]{1,63}'
print "regexp is: " + repr(ma_regexp).replace("'","")






regexp is: [^:/n]{1,63}





Je ne connaissais pas repr, c'est intéressant.



Oui, c'est supposé sortir quelque chose qui ressemble autant que
possible à un literal Python.

Mais je bute sur un autre problème:
In [3]: print(repr('abcndr')) 'abcndr' <--- parfait

In [4]: print(repr('abcndr\'))
'abcndr\' <--- parfait

In [5]: print(repr('abcndrW'))
'abcndr\W' <--- doublement du backslash ?

In [6]: print(repr('abcndrWd\'))
'abcndr\W\d\' <--- un mélange de doublement et de non doublem ent



Oui, en python, dans les chaînes "..." (*pas* r"..."), le backslash ne
fonctionne pas comme en C. Si le caractère "échappé" n'est p as dans une
liste fixée, le backslash est conservé. Donc :

"n" -> un caractère
"W" -> deux caractères (backslash, puis W)

Pour conserver le backslash, repr utilise "\".

Les détails (pour 2.x) sont à
https://docs.python.org/2/reference/lexical_analysis.html#string-literals

(C'est un mauvais choix, si tu me demandes mon avis, mais c'est comme
ça. Pour les regexp, des litéraux r"..." sont assez adaptés, sauf si il
y a des n...)

-- Alain.
Kevin Denis
Le #26304879
Le 27-08-2014, Alain Ketterlin
Oui, en python, dans les chaînes "..." (*pas* r"..."), le backslash ne
fonctionne pas comme en C. Si le caractère "échappé" n'est pas dans une
liste fixée, le backslash est conservé. Donc :

"n" -> un caractère
"W" -> deux caractères (backslash, puis W)



Sauf que j'utilise des regexp, et que W a une signification spéciale
qui n'est pas celle de \W ..
C'est pas très grave, c'était pour un petit script, et je ferais des
remplacementsau besoin.

Pour conserver le backslash, repr utilise "\".

Les détails (pour 2.x) sont à
https://docs.python.org/2/reference/lexical_analysis.html#string-literals



oui, j'ai vu.

(C'est un mauvais choix, si tu me demandes mon avis, mais c'est comme
ça. Pour les regexp, des litéraux r"..." sont assez adaptés, sauf si il
y a des n...)



il n'y a pas vraiment de solution, donc.

merci
--
Kevin
Alain Ketterlin
Le #26305125
Kevin Denis
Le 27-08-2014, Alain Ketterlin
Oui, en python, dans les chaînes "..." (*pas* r"..."), le backslash ne
fonctionne pas comme en C. Si le caractère "échappé" n'es t pas dans une
liste fixée, le backslash est conservé. Donc :

"n" -> un caractère
"W" -> deux caractères (backslash, puis W)



Sauf que j'utilise des regexp, et que W a une signification spéciale
qui n'est pas celle de \W ..



Ce n'est pas encore une regexp, pour l'instant c'est une chaîne de
caractères comme une autre. (Il n'y a pas de version "litérale" d es
regexps en python, contrairement par exemple au /.../ de awk.)

[...]
(C'est un mauvais choix, si tu me demandes mon avis, mais c'est comme
ça. Pour les regexp, des litéraux r"..." sont assez adaptà ©s, sauf si il
y a des n...)



il n'y a pas vraiment de solution, donc.



Juste pour être sûr qu'on se comprend bien : "nW" et "n\W"
représentent exactement la même chaîne. Si tu passes "nW" (trois
caractères) à re.compile(), tout se passera comme tu l'entends.

(Je soupçonne meme que c'est exactement pour cela que python s'él oigne
de la convention de C.)

-- Alain.
Publicité
Poster une réponse
Anonyme