正则表达式:组函数
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']
我想从短语
中提取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']