2010-10-05 4 views
0

J'ai besoin de trouver et remplacer des modèles dans une chaîne avec un contenu généré dynamiquement. Disons que je veux trouver toutes les chaînes dans '' dans la chaîne et doubler la chaîne. une chaîne comme:rechercher et remplacer par programme dynamiquement le contenu dans une chaîne en python

my 'cat' is 'white' devrait devenir mes 'catcat' is 'whitewhite'

tous les matchs pourraient également apparaître deux fois dans la chaîne.

merci

+3

Espérons que la chaîne n'est pas XML, et ces citations ne sont pas des balises XML ouvrir et fermer. – NullUserException

Répondre

7

Faire usage de la puissance de regular expressions. Dans ce cas particulier:

import re 

s = "my 'cat' is 'white'" 

print re.sub("'([^']+)'", r"'\1\1'", s) # prints my 'catcat' is 'whitewhite' 

\1 fait référence au premier groupe dans le regex (appelé $1 dans d'autres implémentations).

+0

merci. pour étendre cela, j'ai découvert que je peux définir une fonction avant le re.sub et l'appliquer à l'argument replace sans l'appeler et passer l'objet match. – aschmid00

1

Il est également assez facile de le faire sans regex dans votre cas:

s = "my 'cat' is 'white'".split("'") 
# the parts between the ' are at the 1, 3, 5 .. index 
print s[1::2] 
# replace them with new elements 
s[1::2] = [x+x for x in s[1::2]] 
# join that stuff back together 
print "'".join(s) 
+0

ce n'est pas une très bonne solution. "" blanc "est mon" chat "" par exemple .... – aschmid00

+0

@ aschmid00: Cela donne "whitewhite" est mon "catcat" "... comme prévu, ou pas? –

+0

oui c'est vrai mais pas encore une jolie solution à mon point de vue. – aschmid00

Questions connexes