Ich werde dies versuchen, zu beantworten, ohne wirklich zu wissen, was Sie sind tatsächlich dort zu tun. Diese Antwort könnte Ihnen also helfen oder nicht.
Zuerst einmal, was re.compile
tut ist einen regulären Ausdruck vorkompilieren, so dass Sie es später verwenden können und nicht jedes Mal kompilieren müssen, wenn Sie es verwenden. Dies ist vor allem dann nützlich, wenn Sie einen regulären Ausdruck verwenden, der mehrmals in Ihrem Programm verwendet wird. Aber wenn der Ausdruck nur ein paar Mal benutzt wird, dann ist es nicht wirklich von Vorteil, ihn im Voraus zu erstellen.
So sollten Sie sich fragen, wie oft der Code ausgeführt wird, der versucht, all diese Ausdrücke zu finden. Ist es nur einmal während der Skriptausführung? Dann können Sie Ihren Code vereinfachen, indem Sie die Ausdrücke einbetten. Da Sie die Übereinstimmungen für jede Zeile in einer Datei ausführen, macht das Vorkompilieren hier wahrscheinlich Sinn.
Aber nur weil Sie den Ausdruck vorkompiliert haben, heißt das nicht, dass Sie zu schlampig sein sollten und den gleichen Ausdruck zu oft finden sollten. Schauen Sie sich diesen Code:
if N1.match(line):
var1 = N1.match(line).group(x).strip()
Unter der Annahme, eine Übereinstimmung vorhanden ist, wird dieses N1.match()
zweimal ausführen. Das ist ein Overhead, den Sie vermeiden sollten, da passende Ausdrücke (abhängig vom Ausdruck) relativ teuer sein können, selbst wenn der Ausdruck bereits vorkompiliert ist.
Stattdessen ist es nur einmal passen, und dann das Ergebnis wieder verwenden:
n1_match = N1.match(line)
if n1_match:
var1 = n1_match.group(x).strip()
an Ihrem Code Sehen, Ihre regulären Ausdrücke auch mutally Exklusiv-oder zumindest Sie immer nur verwenden, das erste Spiel zu sein scheinen und Überspringe die restlichen. In diesem Fall sollten Sie sicherstellen, dass Sie Ihre Schecks bestellen, so dass die häufigsten Überprüfungen zuerst durchgeführt werden. Auf diese Weise vermeiden Sie, zu viele Ausdrücke auszuführen, die nicht übereinstimmen. Versuchen Sie auch, sie so zu ordnen, dass komplexere Ausdrücke seltener ausgeführt werden.
Schließlich sammeln Sie das Übereinstimmungsergebnis in separaten Variablen varN
. An dieser Stelle stelle ich in Frage, was genau Sie dort tun, denn nach all Ihren if-Prüfungen haben Sie keine klare Möglichkeit herauszufinden, was das Ergebnis war und welche Variable zu verwenden ist. An diesem Punkt könnte es sinnvoller sein, sie nur in einer einzelnen Variablen zu sammeln oder bestimmte Logik innerhalb der Bedingungskörper zu verschieben. Aber es ist schwer zu sagen mit der Menge an Informationen, die Sie gegeben haben.
Im Allgemeinen, wenn Sie 'n' Dinge wollen, verwenden Sie eine * Liste *. – jonrsharpe
die extrahierten Daten werden in Listen und Wörterbüchern gespeichert, aber warum eine Liste vor dem Extrahieren verwenden? –
... weil Sie etwas kürzer und effizienter haben wollen, als 'n' kompilierte Regexes mit separaten Namen zu definieren? – jonrsharpe