OVH Cloud OVH Cloud

search and replace avancé

2 réponses
Avatar
sean_mcilroy
## trop simple, sans doute, mais voici en tout cas:

texte = '''
tralalala nil nisi divinum stabile est
\url{adresse_web_0}
the naming of cats is a difficult matter
\url{adresse_web_1}
i shall wear the bottoms of my trousers rolled
\url{adresse_web_2}
headpiece filled with straw, alas
'''

def remplaceur(x):
i = x.index('{')
j = x.index('}')
adresse_web = x[i+1:j]
return '<A HREF = "' + adresse_web + '">' + adresse_web + '</A>'

def f(t):
from string import replace
i = t.index('\\url')
j = i + t[i:].index('}')
x = t[i:j+1]
return replace(t,x,remplaceur(x))

def g(t):
while True:
try: t = f(t)
except: break
return t

print texte
print g(texte)


ps: Unable to retrieve message lquce.51996$Of5.33243@nntpserver.swip.net

2 réponses

Avatar
remi
Bonjour,

## trop simple, sans doute, mais voici en tout cas:


C'est beau, merci beaucoup et sans utiliser (directement) le module re :
"Sometimes you have a programming problem and it seems like the best
solution is to use regular expressions; now you have two problems." ;-)

(snip)

def f(t):
from string import replace
i = t.index('url')
j = i + t[i:].index('}')
x = t[i:j+1]
return replace(t,x,remplaceur(x))


En essayant de bien comprendre votre code, j'ai lu que la fonction
replace(str, old, new[, maxreplace]) va disparaitre avec python 3 (elle
est "deprecated" mais nous avons le temps !)

Le code : return t.replace(x,remplaceur(x)) serait plus perenne.

D'ailleurs, ça fonctionne aussi en mettant from string import replace en
commentaire... le module string est-il automatiquement chargé ?
Peut-être garder "from string import replace" impose de ne charger que
"replace" et pas tout le module "string" ? C'est étrange.
Merci encore.
@+
Rémi.

Avatar
sean_mcilroy
remi wrote in message news:<Kg6de.52882$...

<snip>

En essayant de bien comprendre votre code, j'ai lu que la fonction
replace(str, old, new[, maxreplace]) va disparaitre avec python 3 (elle
est "deprecated" mais nous avons le temps !)

Le code : return t.replace(x,remplaceur(x)) serait plus perenne.

D'ailleurs, ça fonctionne aussi en mettant from string import replace en
commentaire... le module string est-il automatiquement chargé ?
Peut-être garder "from string import replace" impose de ne charger que
"replace" et pas tout le module "string" ? C'est étrange.
Merci encore.
@+
Rémi.



sur mon ordinateur "from string import replace" doit etre la pour que
"replace(x,y,z)" marche, mais "x.replace(y,z)" marche sans cela.
(merci de m'avoir appris cette syntaxe.) je me doute que votre
ordinateur lise "replace(x,y,z)" comme "x.replace(y,z)". moi,
j'utilise encore Python 2.3.