Это регулярное выражение терпит неудачу, или мне нужно изменить регулярное выражение для поддержки «необязательно, а затем»? - PullRequest
0 голосов
/ 10 февраля 2019

Я пытаюсь следующее регулярное выражение: https://regex101.com/r/5dlRZV/1/, Я знаю, что я пытаюсь с \author, а не \maketitle

В Python я пытаюсь следующее:

import re

text = str(r'
\author{
\small 
}

\maketitle
')

regex = [re.compile(r'[\\]author*|[{]((?:[^{}]*|[{][^{}]*[}])*)[}]', re.M | re.S), 
re.compile(r'[\\]maketitle*|[{]((?:[^{}]*|[{][^{}]*[}])*)[}]', re.M | re.S)]

for p in regex: 
  for m in p.finditer(text): 
     print(m.group())

Python зависает , я подозреваю, что это как-то связано с моим шаблоном, и SRE не работает.

РЕДАКТИРОВАТЬ: Что-то не так с моим регулярным выражением?Можно ли его улучшить, чтобы он действительно работал?Тем не менее я получаю те же результаты на моей машине.

РЕДАКТИРОВАТЬ 2: Можно ли это как-то исправить, чтобы шаблон поддерживал опционально с последующим?: Или? = Look-head?Чтобы можно было захватить оба?

1 Ответ

0 голосов
/ 10 февраля 2019

Прочитав заголовок «Скобки создают пронумерованные группы захвата» на этом сайте: https://www.regular -expressions.info / brackets.html , мне удалось найти ответ:

Besides grouping part of a regular expression together, parentheses also create a 
numbered capturing group. It stores the part of the string matched by the part of 
the regular expression inside the parentheses.

The regex Set(Value)? matches Set or SetValue. 
In the first case, the first (and only) capturing group remains empty. 
In the second case, the first capturing group matches Value.
...