2015-12-13 24 views
10

Da re.sub() die gesamte modifizierte/unmodifizierte Zeichenfolge zurückgibt, gibt es eine Möglichkeit zu überprüfen, ob re.sub() den Text erfolgreich geändert hat, ohne die Ausgabe von re.sub() zu durchsuchen?Wie überprüft man, ob re() in Python erfolgreich ersetzt wurde?

+0

Warum sollte es nicht richtig ersetzen. Sie können die Zeichenfolge für die Regex mit 're.match()' überprüfen, bevor Sie wissen möchten, ob Übereinstimmungen vorhanden sind. – nipeco

+0

Ich nahm an, die Frage bedeutete: "Wie können Sie sagen, ob re() Ersetzungen macht oder nicht" – Jon

+0

Was wollen Sie eigentlich tun? –

Antwort

3

Wenn Sie den folgenden Code:

import re 
s1 = "aaa" 
result = re.sub("a", "b", s1) 

Sie überprüfen können, ob der Anruf an Unter gemacht subsitutions durch die ID des Ergebnisses zu vergleichen, wie so S1:

id(s1) == id(result) 

oder, das ist das gleiche:

Dies ist, weil Zeichenfolgen in Python unveränderlich sind, also wenn irgendwelche Ersetzungen ar Das Ergebnis ist eine andere Zeichenfolge als das Original (dh die ursprüngliche Zeichenfolge ist unverändert). Der Vorteil der Verwendung der IDs zum Vergleich anstelle des Inhalts der Strings besteht darin, dass der Vergleich eine konstante Zeit anstelle einer linearen ist.

+2

Ich kann die Downvotes nicht verstehen. Ich habe bestätigt, dass es funktioniert. Dies ist sogar dokumentiert: "Wenn das Muster nicht gefunden wird, wird die Zeichenfolge unverändert zurückgegeben". Nun, es wird nicht explizit "das gleiche Objekt" gesagt, also könnte es irgendwann brechen, aber wenn das OP darauf eingestellt ist, Vergleiche zu vermeiden, ist dies das Beste, was wir anbieten können. –

+1

'Re (s1," a "," b ")' macht keinen Sinn im Zusammenhang mit Ihrer Antwort –

+1

Padric, danke ich habe die Antwort geändert, um dies zu reflektieren – Jon

8

können re.subn verwenden, die die gleiche Operation wie Unter auszuführen(), aber das Rück ein Tupel (new_string, number_of_subs_made)

Wenn die Anzahl der Modifikation 0 ist d.h. String nicht modifiziert wird.

>>> re.subn('(xx)+', '', 'abcdab') 
('abcdab', 0) 
>>> re.subn('(ab)+', '', 'abcdab') 
('cd', 2) 
>>> 
+0

Danke Praveen, das gibt Infos über die Modifikation. –

Verwandte Themen