2011-01-07 19 views
13

Mögliche Duplizieren:
Reversing a regular expression in pythonGenerieren Sie eine Zeichenfolge, die einen RegEx in Python entspricht

Ich glaube, ich in ein Problem lief, die einfacher klingt, als es ist ... Ich bin nicht zu sicher. Ich möchte einen regulären Ausdruck definieren, und ich möchte eine Reihe von Strings erstellen, die zu ihm passen.

Gibt es irgendein Modul, das ich importieren kann, das diese Funktionalität hat? Vorzugsweise kein Brute-Force-Ansatz unter Verwendung von re.search oder re.match. Es muss einen eleganteren Weg geben, das zu tun.

+0

siehe hier: http://stackoverflow.com/questions/492716/reversing-a-regular-expression-in-python – virhilo

Antwort

17

Ich habe für generating random strings with Python

auf einer kleinen Helfer Bibliothek arbeiten enthält es eine Methode, xeger(), dass Sie eine Zeichenfolge aus einem regulären Ausdruck erstellen kann:

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

Gerade jetzt, es funktioniert mit grundlegendste reguläre Ausdrücke.

1

Bei einigen regulären Ausdrücken kann die Liste der möglichen Zeichenfolgen unendlich sein. Zum Beispiel:

a* 

umfasst

a 
aa 
aaa 

usw. Somit gibt es keine Möglichkeit, alle Saiten für eine bestimmte Regex zu erzeugen.

+1

Mehr zu dem Punkt, jede Funktion, die Sie schreiben, um eine beliebige Zeichenfolge zu generieren, könnte in einem unendlichen stecken bleiben Schleife bei a * – fredley

+2

asciimoo zeigt auf 'exrex', das mit Generatoren implementiert wird. Auf diese Weise können Sie einfach die Ausgabe und die Größe davon steuern. –

7

Das Exrex-Modul tut dies: https://github.com/asciimoo/exrex.

+0

+1 Funktioniert wie ein Charme! Es installiert sogar mit 'easy_install' :) –

+5

Leider ist es GPL; Sie können es nicht in kommerzieller Software verwenden, ohne es zu kontaminieren. – JDonner

+1

https://bitbucket.org/leapfrogdevelopment/rstr/ hat eine 'xeger' Methode und ist MIT – fjsj

Verwandte Themen