我很抱歉,因为我来自Perl而且我是Python新手。
以下示例对我来说很长:
#!/usr/bin/python
import re
r = re.compile('(?i)m(|[ldf])(\d+)')
m = r.match(text)
if m:
print m.group(2)
在Perl中,它只有一行,而且非常易读。
#!/usr/bin/perl
print $2 if /m(|[ldf])(\d+)/i
如何更简单地重写我的Python示例。如果可能的话,可以像Perl一样轻。
我打算写大量的测试,如果我想保持我的代码可读,我想避免消耗那些无法帮助人们理解我的程序的行。我想我的第一个解决方案是下面这样的东西会更具可读性:
r = R()
if r.exec('(?i)m(|[ldf])(\d+)', text): print r.group(2)
if r.exec('(?i)k(|[rhe])(\d{2})', text): print r.group(2)
不幸的是,在这种情况下,我必须为此编写一个类。
答案 0 :(得分:2)
Python方式重视清晰度而不是简洁,所以事情通常会比Perl更冗长。也就是说,re.compile
步骤是可选的。
m = re.match('(?i)m(|[ldf])(\d+)', text)
if m:
print m.group(2)
在Python中,赋值不是表达式;它们不能用作价值观。因此,无法跳过单独的赋值语句(m = ...
)或将其与if
结合使用。如果您想稍后引用匹配对象,则需要显式赋值 - 没有类似于自动存储捕获组的Perl $n
变量的全局隐式状态。