¿Alguien sabe si Python (cualquier versión) utilizó NFA (autómatas finitos no deterministas) para evaluar expresiones regulares o utiliza algún otro mecanismo? Proporcione enlaces/referencia si está disponible.¿Python usa NFA para la evaluación de expresiones regulares en el módulo re?
6
A
Respuesta
5
4
Esto debería tomar menos de un ms en un DFA:
$ time python3 -c 'import re; re.match("a?"*25+"a"*25, "a"*25)'
real 0m7.273s
Cambio 25 con 100 y no va a terminar para toda la vida.
Aquí es cómo se ve en un DFA (grep):
$ time echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |grep "a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
real 0m0.063s
hay una gran discusión del tema en http://swtch.com/~rsc/regexp/regexp1.html
Cuestiones relacionadas
- 1. Fusionar varias expresiones regulares en una RE
- 2. Python expresiones regulares para extraer la fecha
- 3. Evaluación de expresiones booleanas en Python
- 4. UTF expresiones regulares en Python
- 5. ¿Cómo puedo probar expresiones regulares usando varios motores de RE?
- 6. Limitación de caché del módulo Python re
- 7. Expresiones regulares de Python - re.search() vs re.findall()
- 8. Limpiar expresiones regulares de Python
- 9. Lua string.match usa expresiones regulares irregulares?
- 10. Expresiones regulares de Python O
- 11. Python números findall expresiones regulares y puntos
- 12. Python Expresiones regulares para implementar unescaping de cadena
- 13. Escapar cadena de expresiones regulares en Python
- 14. Empareje eficazmente múltiples expresiones regulares en Python
- 15. Expresiones regulares en OCaml
- 16. Python expresiones regulares no codiciosos
- 17. expresiones regulares (expresiones regulares), reemplace la segunda aparición en javascript
- 18. Python 2.6+ str.format() y expresiones regulares
- 19. Expresiones regulares de Python asignando a grupos con nombre
- 20. ¿Usar expresiones regulares (u otro módulo de python) para comparar texto/caracteres?
- 21. Perl como expresiones regulares en Python
- 22. Expresiones regulares generativas
- 23. fechas de partidos usando Python expresiones regulares
- 24. caracteres Unicode coincidentes en expresiones regulares de Python
- 25. Python partido de expresiones regulares asterisco literal
- 26. de expresiones regulares para la validación URL
- 27. ASP.Net: Formato de evaluación para expresiones monetarias
- 28. expresiones regulares de python devuelven verdadero/falso
- 29. Número de coincidencias de expresiones regulares
- 30. Python comparando cadena contra varias expresiones regulares
Como la mayoría de los motores RE hoy en día permiten lenguajes no regulares, que se ajustará Dudo que un motor de RE moderno realmente todavía use NFAs o DFAs. – Joey
Bueno, dado que un motor de RE puede identificar un subconjunto de RE que son regulares, y que son de uso común, tiene sentido optimizar para esos escenarios. Por lo tanto, es muy posible que a veces utilicen los de NFA o DFA. – MSalters