为什么在正则表达式中这种重复的内部组不匹配?

时间:2019-12-09 16:35:51

标签: python regex

我正在尝试解析以下LaTeX字符串:

\graphicspath{
  {outputs/tikz/turnover/}
  {outputs/tikz/health/}
  {outputs/tikz/flows/}
  {outputs/model/figs/compare/}
  {outputs/model/figs/sensitivity/}
  {outputs/model/figs/flows/}
}

我的正则表达式(python)是:'\\graphicspath\{\s*?(\{.*?\}\s*?)*\}'(带有全局和多行标志), 我以为会收集6条不同的路径。 相反,只有最后一组与内部组匹配:{outputs/model/figs/flows/}

为什么其他路径不匹配? *?内的非贪婪{ }似乎比群组外的*更加贪婪,这应该重复该群组。谢谢,

1 个答案:

答案 0 :(得分:1)

所有路径都使用重复的组模式进行匹配,但只有最后一个存储为组值。

您可以更改正则表达式以使用非捕获组(?:)

提取一组中的所有路径。
\\graphicspath\{\s*?((?:\{.*?\}\s*?)*)\}

re.findall / re.finditer中带有此正则表达式的方括号内的所有路径:

^\s.*{\S*}$