def repl(mo): global cpt cpt += 1 return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig) =========
Les expressions régulières, ça paraît super compliqué au début, mais pour des manipulations un peu complexes comme celle dont tu as besoin c'est vraiment LA solution
- Pierre
On Feb 16, 5:02 pm, OdarR <Olivier.Da...@gmail.com> wrote:
salut,
comment feriez-vous ceci : un remplacement de tag dans une String,
avec
une valeur qui évolue à chaque occurence.
du genre :
".......TAG............TAG................TAG..........TAG"
deviendrait après un remplacement intelligent et efficace:
def repl(mo):
global cpt
cpt += 1
return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig)
=========
Les expressions régulières, ça paraît super compliqué au début, mais
pour des manipulations un peu complexes comme celle dont tu as besoin
c'est vraiment LA solution
def repl(mo): global cpt cpt += 1 return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig) =========
Les expressions régulières, ça paraît super compliqué au début, mais pour des manipulations un peu complexes comme celle dont tu as besoin c'est vraiment LA solution
def repl(mo): global cpt cpt += 1 return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig) =========
Les expressions régulières, ça paraît super compliqué au débu t, mais pour des manipulations un peu complexes comme celle dont tu as besoin c'est vraiment LA solution
- Pierre
ça fait peur, effectivement, j'ai du mal avec les re. ceci dit, je vais comparer plusieurs méthodes, dont la tienne, et ferai le point. merci Pierre,
Olivier
On 16 fév, 21:08, Pierre Quentel <quentel.pie...@wanadoo.fr> wrote:
def repl(mo):
global cpt
cpt += 1
return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig)
=========
Les expressions régulières, ça paraît super compliqué au débu t, mais
pour des manipulations un peu complexes comme celle dont tu as besoin
c'est vraiment LA solution
- Pierre
ça fait peur, effectivement, j'ai du mal avec les re.
ceci dit, je vais comparer plusieurs méthodes, dont la tienne, et
ferai le point.
merci Pierre,
def repl(mo): global cpt cpt += 1 return mo.string[mo.start():mo.end()]+"%02d" %cpt
print re.sub("TAG",repl,orig) =========
Les expressions régulières, ça paraît super compliqué au débu t, mais pour des manipulations un peu complexes comme celle dont tu as besoin c'est vraiment LA solution
- Pierre
ça fait peur, effectivement, j'ai du mal avec les re. ceci dit, je vais comparer plusieurs méthodes, dont la tienne, et ferai le point. merci Pierre,
c'est sûrement possible avec autre chose qu'un while TAG in mystring: mystring=mystring.replace(TAG, TAG+str(compteur), 1) ...
"solution" qui bouclera sans fin à la première occurrence de TAG
merci,
Olivier
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
hth, bb
OdarR wrote:
salut,
comment feriez-vous ceci : un remplacement de tag dans une String,
avec
une valeur qui évolue à chaque occurence.
du genre :
".......TAG............TAG................TAG..........TAG"
deviendrait après un remplacement intelligent et efficace:
c'est sûrement possible avec autre chose qu'un
while TAG in mystring:
mystring=mystring.replace(TAG, TAG+str(compteur), 1)
...
"solution" qui bouclera sans fin à la première occurrence de TAG
merci,
Olivier
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé).
Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la
solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N
tagk = iter(TAG+str(k) for k in N(1)).next
strs = iter(mystring.split(TAG)).next
result = ''.join([strs,tagsk][k%2]() for k in N())
c'est sûrement possible avec autre chose qu'un while TAG in mystring: mystring=mystring.replace(TAG, TAG+str(compteur), 1) ...
"solution" qui bouclera sans fin à la première occurrence de TAG
merci,
Olivier
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
hth, bb
Pierre Maurette
Boris Borcic, le 17/02/2009 a écrit :
[...]
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG final, séquences TAGTAG...
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne par les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45:23
-- Pierre Maurette
Boris Borcic, le 17/02/2009 a écrit :
[...]
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé).
Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la
solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N
tagk = iter(TAG+str(k) for k in N(1)).next
strs = iter(mystring.split(TAG)).next
result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG
final, séquences TAGTAG...
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne par
les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45:23
Bon pour une solution sans re, peut-être quelque chose comme ça (pas testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG final, séquences TAGTAG...
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne par les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45:23
-- Pierre Maurette
Boris Borcic
Pierre Maurette wrote:
Boris Borcic, le 17/02/2009 a écrit :
[...]
Bon pour une solution sans re, peut-être quelque chose comme ça (p as testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG final, séquences TAGTAG...
Non, il y a un problème qui ne dépend pas des TAG dans la source : la boucle finit toujours sur un TAGn final même s'il n'y en a pas dans la source.
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne pa r les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45 :23
Mon newserver ne les conserve pas aussi longtemps, et j'ai la flemme d'interpeller google news. Par contre, une version corrigée (d'accord, c'est plutôt laid).
>>> def test(mystring,TAG='TAG') : from itertools import count as N tagk = iter(TAG +("%02i"%k) for k in N(1)).next strs = mystring.split(TAG) strsit = iter(strs).next return ''.join([strsit,tagk][k%2]() for k in xrange(2*len(strs)-1))
Bon pour une solution sans re, peut-être quelque chose comme ça (p as
testé). Ceci dit il n'y a en fait pas véritablement d'expression
régulière dans la solution de Pierre, juste l'emploi d'une
fonctionnalité du module.
from itertools import count as N
tagk = iter(TAG+str(k) for k in N(1)).next
strs = iter(mystring.split(TAG)).next
result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG
final, séquences TAGTAG...
Non, il y a un problème qui ne dépend pas des TAG dans la source : la boucle
finit toujours sur un TAGn final même s'il n'y en a pas dans la source.
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne pa r
les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45 :23
Mon newserver ne les conserve pas aussi longtemps, et j'ai la flemme
d'interpeller google news. Par contre, une version corrigée (d'accord, c'est
plutôt laid).
>>> def test(mystring,TAG='TAG') :
from itertools import count as N
tagk = iter(TAG +("%02i"%k) for k in N(1)).next
strs = mystring.split(TAG)
strsit = iter(strs).next
return ''.join([strsit,tagk][k%2]() for k in xrange(2*len(strs)-1))
Bon pour une solution sans re, peut-être quelque chose comme ça (p as testé). Ceci dit il n'y a en fait pas véritablement d'expression régulière dans la solution de Pierre, juste l'emploi d'une fonctionnalité du module.
from itertools import count as N tagk = iter(TAG+str(k) for k in N(1)).next strs = iter(mystring.split(TAG)).next result = ''.join([strs,tagsk][k%2]() for k in N())
Je crains qu'il puisse y avoir un problème en cas de TAG initial, TAG final, séquences TAGTAG...
Non, il y a un problème qui ne dépend pas des TAG dans la source : la boucle finit toujours sur un TAGn final même s'il n'y en a pas dans la source.
Voir un fil "Remplacer les occurrences de TRUC dans une chaîne pa r les éléments d'une séquence" de Francois, le 24/10/2008 à 17:45 :23
Mon newserver ne les conserve pas aussi longtemps, et j'ai la flemme d'interpeller google news. Par contre, une version corrigée (d'accord, c'est plutôt laid).
>>> def test(mystring,TAG='TAG') : from itertools import count as N tagk = iter(TAG +("%02i"%k) for k in N(1)).next strs = mystring.split(TAG) strsit = iter(strs).next return ''.join([strsit,tagk][k%2]() for k in xrange(2*len(strs)-1))