2011-01-06 12 views
0

Gibt es eine Möglichkeit, bestimmte Strings zu suchen und zu ersetzen, aber auch auf ähnliche Strings achten und diese nicht ersetzen?spezifische Suche in Python?

zum Beispiel, wenn ich

self.a 
self.b 
self.c 
self.d 
self.e 
self.f 
self.g 

haben und ich wollte

self.a 
self.__b 
self.c 
self.__d 
self.__e 
self.f 
self.g 

und ich will __ auf einige der Variablen hinzufügen, um sie privat zu machen, andere aber nicht, wie würde ich Tun Sie es, kurz, jeden einzeln zu ändern, oder alle von ihnen zu ändern und dann diejenigen rückgängig zu machen, die ich nicht will? Mein Programm hat eine große Anzahl von Variablen und verwendet jede von ihnen sehr oft, also möchte ich nicht selbst durch den Code gehen.

+3

Ist das nicht ein Bearbeitungsproblem mehr als ein Python-Problem? Zum Beispiel könnten Sie Ihren Editor verwenden, um alle "self.b" durch "self .__ b" zu ersetzen, oder verwenden Sie sed auf ähnliche Weise. – Christian

Antwort

1

Sichern Sie Ihr Skript. Erstellen Sie ein neues Skript und import re, dann re() Ihr ursprüngliches Skript. Führen Sie einen Komponententest für das regex-Skript aus, um die Funktionalität sicherzustellen.

3

Regular expressions?

Python's re module hat eine Funktion namens re.sub, die alles ersetzt, das zu einem Muster mit etwas anderem passt.

Sie können auch reguläre Ausdrücke aus Perl, awk, sed usw. verwenden, je nach Ihren Vorlieben. Suchen und ersetzen Sie einfach anhand der Muster, die Sie anpassen und ändern möchten.

+1

+1 für sed. Ein Einzeiler würde wahrscheinlich funktionieren und einfacher sein als ein Python-Skript zu schreiben. – Hollister

1

Reguläre Ausdrücke sind dein Freund hier. Sie sind ein wenig intensiv für den Anfänger, obwohl. Um das Ziel in dem obigen Beispiel zu erreichen verwenden, um den Python-Befehl: ‚Selbst‘

import re 
pattern = r'(self\.)(b|d|e)\s' 
result = re.sub(pattern, '\1__\2', source) 

Diese jede Instanz eines String mit dem Start gefolgt von b, d oder e und ersetzt sie durch ein 'self .__', gefolgt von der korrekten Zeichenkette.

1

Zusätzlich zum Erstellen eines weiteren Skripts zum Durchführen der Ersetzung können Sie dies wahrscheinlich in Ihrem Editor vornehmen. Wenn Sie zum Beispiel Vim verwenden, sollten Sie Folgendes tun:

:%s/self\.\(b\|d\|e\)/self.__\1/g 
+0

Wenn Sie nicht Vim verwenden, aber eine Unix/Linux-Befehlszeile verwenden, versuchen Sie 'sed 's/self \. \ (B \ | d \ | e \)/self .__ \ 1/g' your_python_module.py ' –