Haz coincidir una línea con varias expresiones regulares utilizando Python

¿Hay alguna forma de ver si una línea contiene palabras que coincidan con un conjunto de patrones de expresiones regulares? Si tengo [regex1, regex2, regex3] , y quiero ver si una línea coincide con alguna de esas, ¿cómo haría esto? En este momento, estoy usando re.findall(regex1, line) , pero solo coincide con 1 regex a la vez.

Puede usar las funciones integradas any (o all si todas las expresiones regulares tienen que coincidir) y una expresión del Generador para recorrer todos los objetos de expresiones regulares.

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

(o any(re.match(regex_str, line) for regex in [regex_str1, regex_str2, regex_str2]) si las expresiones regulares no son objetos de expresiones regulares previamente comstackdos, por supuesto)

Aunque eso será ineficiente en comparación con la combinación de sus expresiones regulares en una sola expresión: si este código es crítico para el tiempo o la CPU, debe intentarlo, componiendo una expresión regular única que abarque todas sus necesidades, utilizando el especial | Operador de expresiones regulares para separar las expresiones originales. Una forma sencilla de combinar todas las expresiones regulares es usar el operador de cadena “join”:

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

Aunque la combinación de expresiones regulares en este formulario puede dar lugar a expresiones incorrectas si las originales ya utilizan el | operador.

Pruebe este nuevo regex: (regex1) | (regex2) | (regex3). Esto hará coincidir una línea con cualquiera de las 3 expresiones regulares en ella.

Usted puede recorrer los elementos de expresiones regulares y hacer una búsqueda.

 regexList = [regex1, regex2, regex3] line = 'line of data' gotMatch = False for regex in regexList: s = re.search(regex,line) if s: gotMatch = True break if gotMatch: doSomething()