为啥这个重复的内部组在正则表达式中不匹配? [复制]
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 的正则表达式中不起作用? [复制]