Need help in Python regular expression

Mark Tolonen metolone+gmane at
Fri Jun 12 00:41:24 EDT 2009

"meryl" <silverburgh.meryl at> wrote in message 
news:2d4d8624-043b-4f5f-ae2d-bf73bca3d51b at
> Hi,
> I have this regular expression
> blockRE = re.compile(".*RenderBlock {\w+}")
> it works if my source is "RenderBlock {CENTER}".
> But I want it to work with
> 1. RenderTable {TABLE}
> So i change the regexp to re.compile(".*Render[Block|Table] {\w+}"),
> but that breaks everything
> 2. RenderBlock (CENTER)
> So I change the regexp to re.compile(".*RenderBlock {|\(\w+}|\)"),
> that also breaks everything
> Can you please tell me how to change my reg exp so that I can support
> all 3 cases:
> RenderTable {TABLE}
> RenderBlock (CENTER)
> RenderBlock {CENTER}

[abcd] syntax matches a single character from the set.  Use non-grouping 
parentheses instead:

import re
pat = re.compile(r'Render(?:Block|Table) (?:\(\w+\)|{\w+})')

testdata = '''\
RenderTable {TABLE}
RenderBlock (CENTER)
RenderBlock {CENTER}
RenderTable {TABLE)      #shouldn't match

print pat.findall(testdata)


['RenderTable {TABLE}', 'RenderBlock (CENTER)', 'RenderBlock {CENTER}']


More information about the Python-list mailing list