Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

Aucune réponse
Avatar
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 = '[^:/\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?

Merci
--
Kevin

6 réponses

Avatar
YBM
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.
Avatar
Alain Ketterlin
YBM writes:

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.
Avatar
Kevin Denis
Le 26-08-2014, Alain Ketterlin 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}





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'))
'abcndrW' <--- doublement du backslash ?

In [6]: print(repr('abcndrWd'))
'abcndrWd' <--- 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
Avatar
Alain Ketterlin
Kevin Denis writes:

Le 26-08-2014, Alain Ketterlin 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}





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'))
'abcndrW' <--- doublement du backslash ?

In [6]: print(repr('abcndrWd'))
'abcndrWd' <--- 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.
Avatar
Kevin Denis
Le 27-08-2014, Alain Ketterlin a écrit :
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
Avatar
Alain Ketterlin
Kevin Denis writes:

Le 27-08-2014, Alain Ketterlin a écrit  :
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 "nW"
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.