Best way to extract from regex in if statement

Tim Chase python.list at
Sat Apr 4 04:11:04 CEST 2009

bwgoudey wrote:
> I have a lot of if/elif cases based on regular expressions that I'm using to
> filter stdin and using print to stdout. Often I want to print something
> matched within the regular expression and the moment I've got a lot of cases
> like:
> ...
> elif re.match("^DATASET:\s*(.+) ", line):
>         m=re.match("^DATASET:\s*(.+) ", line)
>         print
> which is ugly because of the duplication but I can't think of a nicer of way
> of doing this that will allow for a lot of these sorts of cases. Any
> suggestions?

I've done this in the past with re-to-function pairings:

   def action1(matchobj):
   def action2(matchobj):
   # ... other actions to perform

   searches = [
     (re.compile(PATTERN1), action1),
     (re.compile(PATTERN2), action2),
     # other pattern-to-action pairs

   # ...
   line = ...
   for regex, action in searches:
     m = regex.match(line)
     if m:

(note that that's a for/else loop, not an if/else pair)


More information about the Python-list mailing list