On Dec 22, 8:30 am, "BJörn Lindqvist" <[EMAIL PROTECTED]> wrote:
> With regexps you can search for strings matching it. For example,
> given the regexp: "foobar\d\d\d". "foobar123" would match. I want to
> do the reverse, from a regexp generate all strings that could match
> it.
>
> The regexp: "[A-Z]{3}\d{3}" should generate the strings "AAA000",
> "AAA001", "AAA002" ... "AAB000", "AAB001" ... "ZZZ999".
>
> Is this possible to do?Here is a first cut at your problem (http://pyparsing-public.wikispaces.com/space/showimage/invRegex.py). I used pyparsing to identify repeatable ranges within a regex, then attached generator-generating classes to parse actions for each type of regex element. Some limitations: - unbounded '*' and '+' repetition is not allowed - only supports \d, \w, and \s macros Here are the test cases in the program that generate the expected list of permutations: [A-E] [A-D]{3} X[A-C]{3}Y X[A-C]{3}\( X\d [A-C]\s[A-C]\s[A-C] [A-C]\s?[A-C][A-C] [A-C]\s([A-C][A-C]) [A-C]\s([A-C][A-C])? [A-C]{2}\d{2} -- http://mail.python.org/mailman/listinfo/python-list
