在Python中缩短regex用法语法

2024-06-10 14:57:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我很抱歉,因为我来自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)

不幸的是,在这种情况下,我必须为此编写一个类。你知道吗


Tags: textimportreifbinusrmatchgroup
1条回答
网友
1楼 · 发布于 2024-06-10 14:57:33

Python方法重视清晰而不是简洁,因此通常情况下,事情会比Perl中的更冗长。也就是说,re.compile步骤是可选的。你知道吗

m = re.match('(?i)m(|[ldf])(\d+)', text)
if m:
  print m.group(2)

在Python中,赋值不是表达式;它们不能用作值。因此,无法跳过单独的赋值语句(m = ...)或将其与if组合。如果您想稍后引用match对象,您确实需要一个显式赋值—没有类似于Perl $n变量的全局隐式状态来自动存储捕获组。你知道吗

相关问题 更多 >