【发布时间】:2011-02-02 23:52:31
【问题描述】:
在 Python 中有没有一种方法可以在不显式创建匹配对象的情况下访问匹配组(或另一种美化以下示例的方法)?
下面是一个例子来说明我提出这个问题的动机:
遵循 Perl 代码
if ($statement =~ /I love (\w+)/) {
print "He loves $1\n";
}
elsif ($statement =~ /Ich liebe (\w+)/) {
print "Er liebt $1\n";
}
elsif ($statement =~ /Je t\'aime (\w+)/) {
print "Il aime $1\n";
}
翻译成Python
m = re.search("I love (\w+)", statement)
if m:
print "He loves",m.group(1)
else:
m = re.search("Ich liebe (\w+)", statement)
if m:
print "Er liebt",m.group(1)
else:
m = re.search("Je t'aime (\w+)", statement)
if m:
print "Il aime",m.group(1)
看起来很别扭(if-else-cascade,匹配对象创建)。
【问题讨论】:
-
警告:Python re.match() 专门匹配目标的开头。因此 re.match("I love (\w+)", "Oh! How I love you") 不匹配。您要么想使用 re.search() 要么使用适当的通配符模式显式地为正则表达式添加前缀 re.match(".* I love (\w+)", ...)
-
@Jim Dennis:感谢指出;我相应地调整了python示例
-
@S.Lott:哎呀,你是对的。我没看到,虽然我在发帖之前一直在寻找;尽管如此,这里还是有有价值的新答案