Соответствует ли if re и группирует захват в одной строке? - PullRequest
5 голосов
/ 28 мая 2020

Есть ли способ в Python выполнить совпадение if и групповой захват в одной строке?

В PERL Я бы сделал это так:

my $line = "abcdef";

if ($line =~ m/ab(.*)ef/) {
    print "$1\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

придется повторять матч дважды.

1 Ответ

2 голосов
/ 28 мая 2020

Просто удалите 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
...