group
должен дать последнее совпадение группы регулярного выражения, в то время как модуль регулярных выражений Python также предоставляет captures
для получения всех совпадений.При использовании group
для группы с ссылкой на группу последнее совпадение только названной группы возвращается group
, игнорируя совпадения ссылок возвращается captures
:
>>> import regex
>>> m = regex.fullmatch('(?P<x>.)*(?&x)', 'abc')
>>> m.captures('x')
['a', 'b', 'c'] # all matches, both of x and &x
>>> m.group('x')
'b' # last match only of matches of x, ignoring &x
Без ссылки, просто копирование именованной группы, она работает как положено:
>>> m = regex.fullmatch('(?P<x>.)(?P<x>.)(?P<x>.)', 'abc')
>>> m.captures('x')
['a', 'b', 'c']
>>> m.group('x')
'c' # last match of all three matches
Кто-нибудь знает, является ли это предполагаемым поведением илиможет быть ошибка?И если задумано, почему это так?Предоставляет ли объект сопоставления какую-либо информацию о том, к какой части регулярного выражения относится совпадение, к указанной группе или к ссылке?
Я использую регулярное выражение 2018.8.29, Python 3.6.5 и opensuse 15.0.