[Roy Smith] > I want to test a line to see if it matches any of a bunch of pre- > compile regexes. I also want to capture the match objects. What > really want to write is something like this (pseudo-code): > > e1 = re.compile ('...') > e2 = re.compile ('...') > e3 = re.compile ('...') > > line = file.readline() > if (m = e1.match (line)): > text = m.group(1) > elif (m = e2.match (line)): > text = m.group(1) > elif (m = e3.match (line)): > text = m.group(1) > ... Na, you really want something like this: regexps = [re.compile('...'), re.compile('...'), ... re.compile('...')] line = file.readline() for r in regexps: match = r.match(line) if match: break # Now, assuming regexps isn't an empty list, match is None if and only # if no regexp matched. if match: text = match.group(1) else: text = "There's a lobster on the loose!" Now when your set of regexps changes, you need only fiddle the regexps list; no need to touch the *code* ever again. If you do this a lot, write a little class that takes a list of regexps in the constructor, and give it a (say) .find_first_match(line) method. iteration-beats-embedded-assignments-by-a-long-shot-ly y'rs - tim
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4