2017-03-02 6 views
0

Ich habe ein kleines Problem mit der Entwicklung einer Funktion.Python Version Problem mit Re

Das Problem ist mit der folgenden Funktion.

Ich entwickle auf einem 2.7 System, aber es wird schließlich auf einem 2.6 System laufen. Ich kann das 2.6-System nicht aktualisieren, da es für andere Dinge verwendet wird.

Auf 2.6 tun Sie einfach wieder.DOTALL, aber auf dem 2.7-System müssen Sie die Flags = Re.DOTALL, um es funktionieren zu lassen.

Ich könnte meine Python-Version auf das Produktivsystem herunterstufen, aber ich wollte das programmatisch angehen und ein Problem durch Kodierung lösen. Zugegeben, downgraded wäre die praktischere Antwort.

Gibt es einen Weg, ich kann eine Python-Version prüfen, bevor Sie die Funktion ausführen?

+2

[ 're.sub' auf Python 2.6] (https://docs.python.org/release/2.6/library/re.html # re s) nimmt überhaupt keine "Flags", Sie würden "re.DOTALL" als "count" übergeben. – jonrsharpe

Antwort

3

Sie die Regex kompilieren kann zuerst und übergebe die Flags an re.compile. Das zurückgegebene Objekt wird über eine sub-Methode verfügen, die sich entsprechend verhalten sollte (als ob das Flag in python2.7 übergeben wurde). Dies verhält sich genauso auf python2.7 und python2.6 IIRC:

CRYPTO_RE = re.compile(..., flags=re.DOTALL) 
... # Other regex's compiled here too. 

def clean_file(filename, file_lines): 
    file_lines = CRYPTO_RE.sub(subst, file_lines) 
    ... 
+0

Das hat es getan. Vielen Dank. – NineTail

-1

Ich glaube, dass so etwas wie

assert sys.version_info == (2,6)

funktionieren sollte ... Aber ich laufe nur 3.x