if re match 和 group capture 是否在同一行?

Does an if re match & group capture in the same line?

Python 中有没有办法在同一行中进行 if 重新匹配和组捕获?

在 PERL 中我会这样做:

my $line = "abcdef";

if ($line =~ m/ab(.*)ef/) {
    print "\n";
}

输出:

badger@pi0: scripts $ ./match.py
cd

但我在 Python 中找到的最接近的方式是这样的:

import re

line = 'abcdef'

if re.search('ab.*ef', line):
    match = re.findall('ab(.*)ef', line)
    print(match[0])

输出:

badger@pi0: scripts $ ./match.pl
cd

这似乎必须匹配两次。

只需删除 search。你不需要它。

matches = re.findall('ab(.*)ef', line)
print(matches)

或者,如果您只对第一场比赛感兴趣,请删除 findall:

match = re.search('ab(.*)ef', line)
if match:
    print(match.group(1)) # 0 is whole string, 1 is first capture