Bonsoir,
Je suis actuellement confronté à un problème dont j'ai dû mal à trouver la solution même théorique.
Mon cas de figure est le suivant :
Je cherche à remplacer des chaînes par ces mêmes chaînes avec des guillemets en plus.
Pour cela, j'ai constitué un ""dictionnaire" en découpant mes chaînes par mots et en supprimant les doublons.
J'obtiens un beau résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 import sys, string ma_chaine_initiale="azerty uiop. (azerty) (uiop )ytreza qsdfg. hjklm)) (azertyyio.uiop) azertyy uiop ytreza qsdfgj hjklml" #J'obtiens un dictionnaire comme ci-dessous ma_liste_dict = ['azerty','uiop','ytreza','qsdfg','hjklm','azertyyio','azertyy','ytreza','qsdfgj','hjklml'] for item in ma_liste_dict: ma_chaine_initiale = string.replace(ma_chaine_initiale,item,'"' + item + '"') print ma_chaine_initiale
Pour comprendre ce cas, je vais prendre le cas de la chaine azertyyio.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 "azerty" "uiop". ("azerty") ("uiop" )""ytreza"" "qsdfg". "hjklm")) ("azerty"yio. "uiop") "azerty"y "uiop" ""ytreza"" "qsdfg"j "hjklm"l
Dans ma boucle "for item in ma_liste_dict:", le rechercher-remplacer sur azertyyio me renvoie "azerty"yio car il a d'abord recherché sur azerty et à remplacé la chaine.
J'ai pensé solutionné le problème, en rangeant par ordre décroissant de longueur les chaînes du dictionnaire avec
ma_liste_dict = sorted(ma_liste_dict, key=len, reverse=True)
Bilan : il m'imbrique sur la chaîne azertyyio au fil de la boucle car les trois élements du rechercher-remplacer partage la même chaîne azerty
1er tour
"azertyyio"
2ème tour
""azertyy"io"
enfin 3ème tour
"""azertyy"io""
Il me faut une variable de contrôle pour dire à mon rechercher-remplacer de ne plus travailler là où il est déjà passé (il fait du zèle...). Vous auriez une idée comment procéder ? D'autres solutions alternatives pour résoudre un cas d'utilisation similaire au mien? Existe-t-il un algorithme pour ce cas ?
Merci de vos remarques (constructives bien entendues )
gratiert
Merci
Partager