Please check out this example on the pyparsing wiki, invRegex.py:
http://pyparsing.wikispaces.com/file/view/invRegex.py. This code
implements a generator that returns successive matching strings for
the given regex. Running it, I see that you actually have a typo in
your example.
print list(invert("[1|2|3]{2}"))
['11', '1|', '12', '13', '|1', '||', '|2', '|3', '21', '2|', '22',
'23', '31', '3|', '32', '33']
I think you meant either "[123]{2}" or "(1|2|3){2}".
print list(invert("[123]{2}"))
['11', '12', '13', '21', '22', '23', '31', '32', '33']
['11', '12', '13', '21', '22', '23', '31', '32', '33']
Of course, as other posters have pointed out, this inverter does not
accept regexen with unbounded multiple characters '+' or '*', but '?'
and "{min,max}" notation will work. Even '.' is supported, although
this can generate a large number of return values.
Of course, you'll also have to install pyparsing to get this to work.
-- Paul