2014-02-09 33 views
1

我需要构建一个程序,该程序可以读取多行代码,并从每行中提取正确的信息。 示例文本:使用正则表达式来查找同一行上的多个匹配

no matches 
one match <'found'> 
<'one'> match <found> 
<'three'><'matches'><'found'> 

对于这种情况,该程序可以检测<'found'><'one'><'three'><'matches'><'found'>火柴,因为它们都具有 “<” 和 “'”。 但是,我无法使用正则表达式来计算同一行上的多个匹配。我用的是一样的东西:

re.search('^<.*>$') 

但如果有在同一行多个匹配,额外的“'<”和“>'”被当作.*的一部分,没有他们计算作为单独的比赛。我该如何解决?

+0

多重匹配问题,通过去除锚,使点量词懒散照顾(非贪婪)。但是您还需要将单引号添加到您的模式中 - 请参阅anubhava的正则表达式模式 –

回答

3

这工作 -

>>> r = re.compile(r"\<\'.*?\'\>") 
>>> r.findall(s) 
["<'found'>", "<'one'>", "<'three'>", "<'matches'>", "<'found'>"] 
+0

您不需要转义'<', ''', '>'。他们只是字面上匹配。 – falsetru

2

您可以使用非>字符re.findall搭配尖括号内:

>>> re.findall('<[^>]*>', "<'three'><'matches'><'found'>") 
["<'three'>", "<'matches'>", "<'found'>"] 

非贪婪量词“?”如anubhava所建议的也是一种选择。

2

使用findall,而不是search

re.findall(r"<'.*?'>", str)