如何在Python中找到多个相同的格式?
问题描述:
想了解一下这个项目是什么,我正在尝试编写一种标记语言来编译为HTML/CSS。我计划格式化这样的链接:@(链接掩码)[(链接网址)],我想查找所有这一切,并获得链接掩码和链接网址。如何在Python中找到多个相同的格式?
我尝试使用这个代码是:
re.search("@(.*)\[(.*)\]", string)
但它开始在一审开始,在链接的最后一个实例的结束而结束。任何想法,我怎么能找到他们所有的人,在一个列表或什么?
答
正则表达式的默认行为是“贪婪匹配”。这意味着每个.*
将尽可能多的字符,因为它可以匹配。
你希望它们匹配尽可能少的字符数量,为此,改变每个.*
变成.*?
。最后的问号将使模式匹配最少的字符数。由于您将模式固定为]
字符,因此它仍然会正确匹配/消耗整个链接。
答
*
是贪婪的:它可以匹配尽可能多的字符,例如,直到文档中最后一个右括号。 (毕竟,.
意味着“任何字符”和)
是“任意字符”不亚于任何其它字符。)
您需要的*
的非贪婪版本,这是*?
(也许其实你应该使用+?
,因为我不认为零长度的比赛将是非常有用的)。