¿Hay alguna manera de ver si una línea contiene palabras que coinciden con un conjunto de patrones de expresiones regulares? Si tengo [regex1, regex2, regex3]
, y quiero ver si una línea coincide con cualquiera de ellas, ¿cómo podría hacerlo? En este momento, estoy usando re.findall(regex1, line)
, pero solo coincide con 1 expresión regular a la vez.Coincide con una línea con varias expresiones regulares usando Python
Respuesta
Puede usar las funciones integradas any
(o all
si todas las expresiones regulares tienen que coincidir) y una expresión de generador para hacer un ciclo a través de todos los objetos regex.
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 pre-compilados objetos de expresiones regulares, por supuesto)
A pesar de que habrá ineficient en comparación con la combinación de sus expresiones regulares en una sola expresión - si este código es el momento o cpu critical, debería intentar en su lugar, componer una única expresión regular que abarque todas sus necesidades, utilizando el operador especial de expresiones regulares |
para separar las expresiones originales. Una forma sencilla de combinar todos los regexs es el uso de la cadena "unirse" operador:
re.match("|".join([regex_str1, regex_str2, regex_str2]) , line)
Aunque la combinación de las expresiones regulares en este formulario puede dar lugar a expresiones erróneas si los originales ya hacen uso de la |
operador.
Pruebe esta nueva expresión regular: (regex1) | (regex2) | (regex3). Esto coincidirá con una línea con cualquiera de las 3 expresiones regulares en ella.
'(?: ...)' es probablemente una mejor idea que '(...)' aquí, para evitar la creación de grupos de captura falsos. –
@Karl ... a menos que desee verificar la veracidad de '.group (n)' para determinar * qué * grupo capturó. –
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()
- 1. Powershell coincide con una sola cadena contra varias expresiones regulares?
- 2. No coincide con C++ 11 expresiones regulares
- 3. expresiones regulares - coincide con todos los anclajes con atributos opcionales
- 4. varias coincidencias expresiones regulares en misma línea
- 5. JavaScript expresiones regulares - coincide con una serie de números hexadecimales
- 6. Python comparando cadena contra varias expresiones regulares
- 7. Combinar varias expresiones regulares en una sola
- 8. Fusionar varias expresiones regulares en una RE
- 9. Regexp que coincide con las expresiones regulares válidas
- 10. Comodín que coincide con una cadena en la búsqueda de expresiones regulares de Python
- 11. RegExp coincide con una palabra o varias palabras en presupuestos
- 12. expresiones regulares en Javascript con jQuery Contiene expresiones regulares extensión
- 13. fechas de partidos usando Python expresiones regulares
- 14. coincide con el mismo carácter desconocido varias veces
- 15. .NET BindingSource.Filter con expresiones regulares
- 16. Eliminando saltos de línea redundantes con expresiones regulares
- 17. Validar expresiones matemáticas usando expresiones regulares?
- 18. python, expresiones regulares, grupos con nombre y operador "lógico o"
- 19. Combinación de varias sustituciones de expresiones regulares
- 20. Rubí Separar una cadena con expresiones regulares
- 21. salto de línea con ajuste de expresiones regulares
- 22. Multiplicación con expresiones regulares .NET
- 23. Reformatear el código con Expresiones regulares
- 24. expresiones regulares vim con meta-caracteres
- 25. expresiones regulares de Python con signo de interrogación literal
- 26. Expresiones regulares: ¿Coincide con nombres de archivos que comienzan con punto (.)?
- 27. ctags expresiones regulares para múltiples declaraciones en una línea
- 28. Expresiones regulares de Python asignando a grupos con nombre
- 29. Coincidencia de estructuras anidadas con expresiones regulares en Python
- 30. Expresiones regulares de Python O
Puede hacer que el método de unión tenga menos probabilidades de fallar si ajusta cada expresión entre paréntesis. ''(' + ') | ('. join (['foo', 'bar', 'baz']) + ')'' da ''(foo) | (barra) | (baz)''. – FakeRainBrigand
Mejor aún, ajuste '(?: ...)', y junte la cadena de una manera que resalte su estructura lógica. ''|' join ('(?: {0})'. format (x) para x in ('foo', 'bar', 'baz'))' por ejemplo. –
Funcionó para mí .... Gracias – Prateek