J'ai une chaîne comme ci-dessous: p>
Je veux changer de glash entre l'idée et l'objectif de sorte qu'il devienne J'ai essayé avec la regex suivante: p>
Cependant, cela change toutes les backslashes. Quelqu'un peut-il m'aider? Merci beaucoup d'avance p> str_1 = 'Mon idée \ but est de changer \\ "this \\"' code> p> p>
idée / but code> mais sans changer la barre oblique inverse des guillemets \\ "\\" code> . p>
str_2 = re.sub (r '([\ w] *) \\ ([\ w] *)', r "\ 1 / \ 2", str_1) code> p >
4 Réponses :
Je remplacerais les barreaux backslash uniquement si à la fin de la chaîne ou non suivi de la citation: ceci capture le caractère backslash + suivant (ou fin de ligne) et remplace par slash + ce personnage. Le résultat est le suivant: p> Notez que l'utilisation de préfixes bruts est préférable d'éviter que \ \ g code> ne veut rien dire mais avec \ n code> il échouera à moins que les backslashes soient doublés ou r code> préfixe est avant La chaîne (auquel cas une seule glash en arrière est nécessaire partout) p>
Puisque vous ne voulez que remplacer la première barre oblique, la solution la plus simple serait à l'aide du module RE code> lorsqu'il est inutile est une cause fréquente de problèmes pour ceux nouveaux à python. p> p>
Sauf lorsque vous essayez de savoir comment les expressions régulières de Python se comportent pour certaines tâches.
Les exercices d'apprentissage sont toujours légitimes. @ Réponse de Mjrezaee à l'aide de la "assertion de lookahead négatif" qui ne consomme aucun caractère car assorti est difficile à battre.
Malgré les bowvotes, je quitte cette réponse visible, car la question ne demandait pas spécifiquement une solution à base de regex, et les débutants n'étaient souvent pas au courant des alternatives beaucoup plus simples qui devraient presque toujours être préférées.
Vous pouvez utiliser sortie: p> < Pré> xxx pré> p> (\\\) (?! ") code> qui indique les backslashes qui ne sont pas suivies de citations doubles
Reprise de votre propre idée initiale ( ( re.sub (r '([\ w] *) \\ ([\ w] *)', r "\ 1 / \ 2", str_1) code >), qui veut évidemment remplacer seulement entre 2 mots - le réparer simplement comme ceci: + code> au lieu de * code> veut au moins un caractère; [] code> n'est pas nécessaire avec un élément ( \ w code>) uniquement) p> p>
Changer que les backslashes ne sont pas suivies de citations?
re.sub (r '\\ ([^ "])', r '/ \ 1', str_1)) code>Vous voulez obtenir
mon idée / but est de changer / \ "this / \" code> oumon idée / but est de changer \\ "this \\" code>?Remarque, en passant, que la glash entre le "A" et le "g" dans la liaison littérale à
STR1 code> doit vraiment être doublée, bien que votre code fonctionne comme prévu, car il n'y a actuellement aucun défini < Code> \ g code> String Escape.