How to print all expressions that match a regular expression

Paul McGuire ptmcg at austin.rr.com
Sun Feb 7 22:11:10 EST 2010


On Feb 6, 1:36 pm, "hzh... at gmail.com" <hzh... at 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



More information about the Python-list mailing list