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
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
regexp is: '[^:/n]{1,63}'
regexp is: [^:/n]{1,63}
de rien.
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.
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
Bien vu.
--
Kevin
Oui, c'est supposé sortir quelque chose qui ressemble autant que
possible à un literal Python.
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.
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.
oui, j'ai vu.
il n'y a pas vraiment de solution, donc.
merci
--
Kevin
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.)
[...]
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.