此正则表达式会失败,还是需要修改正则表达式以支持“可选后跟”?

时间:2019-02-10 14:58:19

标签: python regex regex-greedy

我正在尝试以下正则表达式: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:可以以某种方式解决此问题,以便该模式支持可选,后跟?:或?=前瞻性吗?这样一个人就能捕捉到两者?

1 个答案:

答案 0 :(得分:0)

在网站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.