我想从短语
中提取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_
答案 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']