正则表达式:组函数

regular expression : group function

我想从短语

中提取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_

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

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

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

你可以使用findall,但是你必须稍微改变正则表达式:

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

对此:

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

(一般来说,+{3,} 不需要同时存在,因为后者表示第一个。)

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