Unlike Perl, you can't to my knowledge match a regular expression inside an if statement in Python and assign the result to a varaible at the same moment. This leads to typical constructs like this:
match = re.search(REGEX, STRING) if match: # do something
So far, so Python. But what if I want to iterate through a file / array of lines, check each line for a few regexes, and fire a catch-all when none has matched? I can't think my way around a rather unwieldy and deeply nested if-else-if-else...-construction:
import re strings = ["abc zzz", "y", "#comment"] for s in strings: match = re.search("(\S+) (\S+)", s) if match: print "Multiword: %s+%s" % (match.group(1), match.group(2)) else: match = re.match("y$", s) if match: print "Positive" else: match = re.match("n$", s) if match: print "Negative" else: # a few more matches possible in real life script, # and then the last catch-all: print "No match found, line skipped"
Isn't there any way to put this in a much nicer looking elif-construction or something? The following doesn't work in Python, because if-clauses take only expressions, not statements. However, something along these lines would strike me as pythonic, or am I blind to something obvious here?
if match = re.search(" ", s): print "Multiword: %s+%s" % (match.group(1), match.group(2)) elif match = re.match("y$", s): print "Positive" else: print "No match found, line skipped"