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. -- http://mail.python.org/mailman/listinfo/python-list