регулярное выражение для соответствующих типов скобок / скобок (python) - PullRequest
0 голосов
/ 27 марта 2019

tl; др среди скобок / круглых скобок <, (, {, [ соответствуют только соответствующим > или ) или } или ] в пределах один шаблон регулярного выражения.

Используя python, я хочу сопоставить соответствующие типы скобок / скобок.

Например, используя re.fullmatch, они будут возвращать совпадения

<abc>
(foo bar)
{blarg}

и они не возвращают совпадения

 <abc)
 (foo bar]
 {blarg>
  • Я хочу один шаблон регулярного выражения (то есть один вызов re.fullmatch) вместо нескольких.
  • Мне не нужны повторяющиеся шаблоны регулярных выражений в одной строке (см. @ zvone попытка уточнения с использованием |, например, <.*>|{.*}|…).


В целом, я хотел бы написать что-то относительно простое, как

(?<brackets>\<\[\({)outrageously complicated re pattern(?<bracket_corresponding_to_earlier_brackets_group>)


Python идиома обратных ссылок на именованную группу находится в области того, что я ищу. Мне нужно что-то вроде « сопоставленных обратных ссылок на именованную группу » или « соответствующих обратных ссылок на именованную группу » (я составил эти фразы).

1 Ответ

1 голос
/ 27 марта 2019

Нельзя использовать обратную ссылку для сопоставления ( с ).Вы просто должны сопоставить его явно.

Например, это будет соответствовать чему-то в пределах < и >:

r'<.*>'

Это будет соответствовать чему-то в пределах [ и ]:

r'\[.*\]'

Чтобы сопоставить любой из них, используйте |, что означает или :

r'(<.*>)|({.*})|(\(.*\))|(\[.*\])'
...