Passen Sie eine Zeile mit mehreren Regex mit Python an

7

Gibt es eine Möglichkeit zu sehen, ob eine Zeile Wörter enthält, die mit einem Satz von Regex-Mustern übereinstimmen? Wenn ich [regex1, regex2, regex3] habe, und ich möchte sehen, ob eine Zeile mit einer dieser Zeilen übereinstimmt, wie würde ich das tun? Momentan verwende ich re.findall(regex1, line) , aber es passt immer nur 1 Regex gleichzeitig.

    
egidra 17.01.2012, 01:19
quelle

3 Antworten

20

Sie können die integrierten Funktionen any (oder all , wenn alle Regexes übereinstimmen müssen) und einen Generator-Ausdruck verwenden, um alle regex-Objekte zu durchlaufen.

any (regex.match(line) for regex in [regex1, regex2, regex3])

(oder any(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2]) , wenn die Regexes natürlich keine vorkompilierten Regex-Objekte sind)

Obwohl dies im Vergleich zur Kombination Ihrer Regexes in einem einzigen Ausdruck ineffizient ist - wenn dieser Code zeit- oder cpu-kritisch ist, sollten Sie stattdessen versuchen, einen einzigen regulären Ausdruck zu erstellen, der all Ihre Bedürfnisse umfasst, mit dem speziellen | regex Operator, um die ursprünglichen Ausdrücke zu trennen.  Eine einfache Möglichkeit, alle Regexs zu kombinieren, ist die Verwendung der Zeichenfolge "Join":

re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)

Obwohl das Kombinieren der Regexes in diesem Formular zu falschen Ausdrücken führen kann, wenn die ursprünglichen Ausdrücke bereits den Operator | verwenden.

    
jsbueno 17.01.2012, 01:26
quelle
1

Probieren Sie diese neue Regex: (Regex1) | (Regex2) | (Regex3). Dies entspricht einer Zeile mit einem der 3 Regexs darin.

    
jok3rnaut 17.01.2012 01:27
quelle
1

Sie können die Regex-Elemente durchlaufen und eine Suche durchführen.

%Vor%     
tharen 17.01.2012 01:31
quelle

Tags und Links