为啥这个重复的内部组在正则表达式中不匹配? [复制]

Posted

技术标签:

【中文标题】为啥这个重复的内部组在正则表达式中不匹配? [复制]【英文标题】:Why isn't this repeated inner group matching in regex? [duplicate]为什么这个重复的内部组在正则表达式中不匹配? [复制] 【发布时间】:2019-12-09 16:35:51 【问题描述】:

我正在尝试解析以下 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/

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

【问题讨论】:

***.com/questions/37003623/… 【参考方案1】:

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

您可以更改正则表达式以使用非捕获组 (?:) 提取一组中的所有路径

\\graphicspath\\s*?((?:\.*?\\s*?)*)\

re.findall/re.finditer括号内的所有路径都带有这个正则表达式:

^\s.*\S*$

【讨论】:

太棒了——谢谢!我不知道捕获组和非捕获组有不同的子组行为。 不错的答案! :)

以上是关于为啥这个重复的内部组在正则表达式中不匹配? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个正则表达式只在 Python 中的行首匹配? [复制]

捕获组在 NSRegularExpression 中不起作用

为啥 `\d` 在 sed 的正则表达式中不起作用? [复制]

为啥加号运算符在 JavaScript 的正则表达式中不起作用? [复制]

正则表达式不匹配,不知道为啥[重复]

为啥这个正则表达式不起作用:r'.*logo.*' [重复]