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"