Unlike Perl, you can't to my knowledge match a regular expression inside an if
statement in Python and assign the result to a variable 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"