正则表达式:组函数

时间:2015-11-19 11:21:32

标签: python regex python-2.x

我想从短语

中提取newsletter__mon_gallery
002c2833d0-newsletter_20131028_mon_gallery

我尝试了([^\d-_]+){3,}

002c2833d0-newsletter_20131028_mon_gallery

所以我可以登记http://www.regexpal.com/。它在视觉上将两个实体newsletter__mon_gallery分开。

但问题是我无法从组功能中检索匹配的值。

import re
string='002c2833d0-newsletter_20131028_mon_enamour'
m=re.search('([^\d-]+){3,}',string)
print m.group()

我得到了

newsletter_

2 个答案:

答案 0 :(得分:2)

re.search()旨在返回第一个匹配。你想要

m = re.findall('[^\d-]{3,}',string)

请注意,我已经编辑了你的正则表达式以删除嵌套量词(你能说“catastrophic backtracking”吗?)和不必要的(如果重复有害的话)捕获组。

答案 1 :(得分:2)

您可以使用findall,但必须稍微更改正则表达式:

([^\d-]+){3,}

到此:

([^\d-]{3,})

(一般情况下,没有必要将+{3,}放在一起,因为后者意味着第一个。{/ p>

>>> re.findall('[^\d-]{3,}', string)
['newsletter_', '_mon_enamour']