2011-01-07 16 views
13

Duplicar posibles:
Reversing a regular expression in pythongenerar una cadena que coincide con una expresión regular en Python

Creo que me encontré con un problema que suena más fácil de lo que es ... No estoy muy seguro Quiero definir una expresión regular, y quiero construir una serie de cadenas que coincidan.

¿Hay algún módulo que pueda importar que tenga esta funcionalidad? Preferiblemente no es un enfoque de fuerza bruta usando re.search o re.match. Debe haber una manera más elegante de hacer eso.

+0

mira aquí: http://stackoverflow.com/questions/492716/reversing-a-regular-expression-in-python – virhilo

Respuesta

17

He estado trabajando en una pequeña biblioteca de ayuda para generating random strings with Python

Incluye un método, xeger() que le permite crear una cadena de una expresión regular:

>>> import rstr 
>>> rstr.xeger(r'[A-Z]\d[A-Z] \d[A-Z]\d') 
u'M5R 2W4' 

En este momento, se trabaja con la mayoría de las expresiones regulares básicas.

1

Para algunas expresiones regulares, la lista de cadenas posibles puede ser infinita. Por ejemplo:

a* 

incluye

a 
aa 
aaa 

etc. Por lo tanto, no hay manera de generar todas las cadenas para una expresión regular dada.

+1

Más al punto, cualquier función que escribas para generar una cadena arbitraria podría quedar atrapada en un infinito loop en * – fredley

+2

asciimoo apunta a 'exrex' que se implementa utilizando generadores. De esta forma puede controlar fácilmente la salida y el tamaño de la misma. –

7

El módulo exrex hace esto: https://github.com/asciimoo/exrex.

+0

+1 ¡Funciona como un encanto! Incluso se instala con 'easy_install' :) –

+5

Por desgracia, es GPL; no puede usarlo en un software comercial sin contaminarlo. – JDonner

+1

https://bitbucket.org/leapfrogdevelopment/rstr/ tiene un método 'xeger' y es MIT – fjsj

Cuestiones relacionadas