OVH Cloud OVH Cloud

Petit piège ordinaire de fin de soirée

18 réponses
Avatar
jean-michel bain-cornu
Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y attendre
si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]

A cette heure là, je n'arrive pas à trouver mieux...
A+
jm

10 réponses

1 2
Avatar
Eric
Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y attendre
si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]

A cette heure là, je n'arrive pas à trouver mieux...
A+
jm


peut etre ca, par example ...

a='calendrier<br>'
b='calendrier'

print a[:len(a)-4*(a[-4:]=='<br>')] # avec <br>

print b[:len(b)-4*(b[-4:]=='<br>')] # sans <br>

Avatar
jean-michel bain-cornu
Bonjour,
Eric wrote:

Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y
attendre si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]

A cette heure là, je n'arrive pas à trouver mieux...
A+
jm



peut etre ca, par example ...

a='calendrier<br>'
b='calendrier'

print a[:len(a)-4*(a[-4:]=='<br>')] # avec <br>

print b[:len(b)-4*(b[-4:]=='<br>')] # sans <br>


Amusant !
Plus compact, moins lisible, et côté perf, c'est à peu près pareil.
Merci en tout cas.
jm

PS: mis en fonctions, ça donne:
def stringStrip1(s1,s2):
r= s1
if s1.endswith(s2):
r= s[:-len(s2)]
return r
def stringStrip2(s1,s2):
return s1[:len(s1)-len(s2)*(s1[-len(s2):]==s2)]
s= 'calendrier<br>'
print stringStrip1(s,'<br>')
print stringStrip2(s,'<br>')


Avatar
NicolasP
Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y attendre
si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]

A cette heure là, je n'arrive pas à trouver mieux...
A+
jm


Bonjour,

strip ne supprime pas qu'en fin de chaine. C'est rstrip qui supprime qu'en fin de chaine.
Si '<br>' peut être supprimé n'importe où dans la chaine, on peut utiliser
'calendrier<br>'.replace('<br>', '')
Mais ça supprime '<br>' de partout dans la chaine.

Nicolas

Avatar
Jerome
jean-michel bain-cornu wrote:
Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y attendre
si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]

A cette heure là, je n'arrive pas à trouver mieux...
A+
jm


Et avec des regexp ?

import re
re.compile('<br>$',re.MULTILINE).sub('', 'calendrier<br>')

Avatar
jean-michel bain-cornu
NicolasP wrote:
strip ne supprime pas qu'en fin de chaine. C'est rstrip qui supprime
qu'en fin de chaine.
Tout à fait exact. Dans mon cas, il n'y avait pas de <br> potentiel en

début de chaîne.
Si '<br>' peut être supprimé n'importe où dans la chaine, on peut
utiliser 'calendrier<br>'.replace('<br>', '')
Mais ça supprime '<br>' de partout dans la chaine.
Là par contre, ma page aurait un aspect un peu tassé...

Le <br> est bien utile partout, sauf à la fin.
Merci.
jm

Avatar
jean-michel bain-cornu
Jerome wrote:
Et avec des regexp ?

import re
re.compile('<br>$',re.MULTILINE).sub('', 'calendrier<br>')

C'est sûrement le plus efficace, mais allez savoir pourquoi, j'ai comme

une grosse allergie aux regexp et autres sed. J'ai tendance à préférer
les langages clairs, aérés, faciles à lire. Même les ; en fin de ligne
me hérissent...
A+
jm

Avatar
Jerome
jean-michel bain-cornu wrote:
Jerome wrote:

Et avec des regexp ?

import re
re.compile('<br>$',re.MULTILINE).sub('', 'calendrier<br>')

C'est sûrement le plus efficace, mais allez savoir pourquoi, j'ai comme

une grosse allergie aux regexp et autres sed. J'ai tendance à préférer
les langages clairs, aérés, faciles à lire. Même les ; en fin de ligne
me hérissent...
A+
jm



tu peux aussi décomposer les appels

s = 'calendrier<br>'
pattern = re.compile('<br>$',re.MULTILINE)
pattern.sub('', s)


Avatar
Méta-MCI
'lut !

Et ça :

print 'calendrier<br>'[:-len('<br>')]

?


@+

MCI
Avatar
Eric Deveaud
jean-michel bain-cornu wrote:
Bonsoir,

Le problème étant de retirer '<br>' en fin de ligne,
'calendrier<br>'.strip('<br>')
donne 'calendrie' et non pas 'calendrier' comme on pourrait s'y attendre
si on ne lit pas la doc...

Pour arriver à cette fin, on peut utiliser :
if 'calendrier<br>'.endswith('<br>'):
'calendrier<br>'[:-4]


attention strip va vire ce qu'on lui demande en DEBUT et en FIN de chaine
si tu veux eliminer des elements en FIN de chaine uniquement rstrip
si tu veux eliminer des elements en DEBUT de chaine uniquement lstrip

plus generique
def my_html_tag_rstrip(string, tag):
if string.lower().endswith(lower(tag)):
string = string[:-len(tag)]
return string


def my_html_tag_rstrip(string, tag):
try:
idx = string.lower().rindex(lower(tag))
return string[:idx]
except ValueError:
return string

Eric

--
un tentative de penetration (pas de sous entendus) d'un systeme peut
etr compare a un viol. Le portscan reviendrait a promener ses doigts
pour voir s'il y a une ceinture de chastete ...
-+- M in GNU - Petit traité de sexualité informatique appliquée -+-

Avatar
jean-michel bain-cornu
Bonjour,
Méta-MCI wrote:
print 'calendrier<br>'[:-len('<br>')]
Séduisant, mais ne donne pas le résultat attendu sur par exemple :

'calendrier<hr>'[:-len('<br>')]
A+
jm

1 2