Python's regular expression?
Duncan Booth
duncan.booth at invalid.invalid
Mon May 8 11:15:16 EDT 2006
Nick Craig-Wood wrote:
> Which translates to
>
> match = re.search('(blue|white|red)', t)
> if match:
> print "Colour:", match.group(1)
> else:
> match = re.search('(socks|tights)', t)
> if match:
> print "Garment:", match.group(1)
> else:
> match = re.search('(boot|shoe|trainer)', t)
> if match:
> print "Footwear:", match.group(1)
> # indented ad infinitum!
This of course gives priority to colours and only looks for garments or
footwear if the it hasn't matched on a prior pattern. If you actually
wanted to match the first occurrence of any of these (or if the condition
was re.match instead of re.search) then named groups can be a nice way of
simplifying the code:
PATTERN = '''
(?P<c>blue|white|red)
| (?P<g>socks|tights)
| (?P<f>boot|shoe|trainer)
'''
PATTERN = re.compile(PATTERN, re.VERBOSE)
TITLES = { 'c': 'Colour', 'g': 'Garment', 'f': 'Footwear' }
match = PATTERN.search(t)
if match:
grp = match.lastgroup
print "%s: %s" % (TITLES[grp], match.group(grp))
For something this simple the titles and group names could be the same, but
I'm assuming real code might need a bit more.
More information about the Python-list
mailing list