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.
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.