Менее эффективен, но выглядит проще:
m0 = re.match("I love (\w+)", statement)
m1 = re.match("Ich liebe (\w+)", statement)
m2 = re.match("Je t'aime (\w+)", statement)
if m0:
print "He loves",m0.group(1)
elif m1:
print "Er liebt",m1.group(1)
elif m2:
print "Il aime",m2.group(1)
Проблема с Perl заключается в неявном обновлении некоторой скрытой переменной. Это просто трудно достичь в Python, потому что вам нужно иметь оператор присваивания для фактического обновления любых переменных.
Версия с меньшим количеством повторений (и лучшей эффективностью) выглядит так:
pats = [
("I love (\w+)", "He Loves {0}" ),
("Ich liebe (\w+)", "Er Liebe {0}" ),
("Je t'aime (\w+)", "Il aime {0}")
]
for p1, p3 in pats:
m= re.match( p1, statement )
if m:
print p3.format( m.group(1) )
break
Незначительный вариант, который предпочитают некоторые Perl:
pats = {
"I love (\w+)" : "He Loves {0}",
"Ich liebe (\w+)" : "Er Liebe {0}",
"Je t'aime (\w+)" : "Il aime {0}",
}
for p1 in pats:
m= re.match( p1, statement )
if m:
print pats[p1].format( m.group(1) )
break
Это вряд ли стоит упоминать, за исключением того, что иногда оно приходит от программистов Perl.