gpt4 book ai didi

python - 你如何将这个正则表达式习语从 Perl 翻译成 Python?

转载 作者:IT老高 更新时间:2023-10-28 20:36:40 31 4
gpt4 key购买 nike

大约一年前我从 Perl 切换到 Python 并且没有回头。我发现只有 一个 成语我在 Perl 中比在 Python 中更容易做到:

if ($var =~ /foo(.+)/) {
# do something with $1
} elsif ($var =~ /bar(.+)/) {
# do something with $1
} elsif ($var =~ /baz(.+)/) {
# do something with $1
}

相应的 Python 代码并不那么优雅,因为 if 语句不断嵌套:

m = re.search(r'foo(.+)', var)
if m:
# do something with m.group(1)
else:
m = re.search(r'bar(.+)', var)
if m:
# do something with m.group(1)
else:
m = re.search(r'baz(.+)', var)
if m:
# do something with m.group(2)

有没有人有一种优雅的方式在 Python 中重现这种模式?我见过使用匿名函数调度表,但对于少数正则表达式,这些表对我来说似乎有点笨拙......

最佳答案

使用命名组和调度表:

r = re.compile(r'(?P<cmd>foo|bar|baz)(?P<data>.+)')

def do_foo(data):
...

def do_bar(data):
...

def do_baz(data):
...

dispatch = {
'foo': do_foo,
'bar': do_bar,
'baz': do_baz,
}


m = r.match(var)
if m:
dispatch[m.group('cmd')](m.group('data'))

通过一些自省(introspection),您可以自动生成正则表达式和调度表。

关于python - 你如何将这个正则表达式习语从 Perl 翻译成 Python?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/122277/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com