On Feb 6, 1:36 pm, "hzh...@gmail.com" <hzh...@gmail.com> wrote: > Hi, > > I am a fresh man with python. I know there is regular expressions in > Python. What I need is that given a particular regular expression, > output all the matches. For example, given “[1|2|3]{2}” as the regular > expression, the program should output all 9 matches, i.e., "11 12 13 > 21 22 23 31 32 33". > > Is there any well-written routine in Python or third-party program to > do this? If there isn't, could somebody make some suggestions on how > to write it myself? > > Thanks. > > Zhuo
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'] >>> print list(invert("(1|2|3){2}")) ['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 -- http://mail.python.org/mailman/listinfo/python-list