我有一个字符串
sg_ts_feature_name_01_some_xyz
在此,我想提取模式之后的两个单词 - sg_ts
,并在它们之间使用下划线分隔
一定是,
feature_name
这个正则表达式,
st = 'sg_ts_my_feature_01'
a = re.match('sg_ts_([a-zA-Z_]*)_*', st)
print a.group()
返回,
sg_ts_my_feature_
然而,我希望,
my_feature
答案 0 :(得分:2)
你可以要求被括号括起来的小组,' a.group(1)',返回
'my_feature_'
此外,如果您的字符串始终采用此形式,您还可以使用字符串结尾字符$
并使内部匹配lazy instead of greedy(因此它不会吞下_
)。
a = re.match('sg_ts_([a-zA-Z_]*?)[_0-9]*$',st)
答案 1 :(得分:2)
问题在于你要求整场比赛,而不仅仅是捕捉组。来自the manual:
组([group1,...]) 返回匹配的一个或多个子组。如果只有一个参数,则结果为单个字符串;如果有多个参数,则结果是一个元组,每个参数有一个项目。如果没有参数,group1默认为零(返回整个匹配)。如果groupN参数为零,则相应的返回值是整个匹配的字符串;如果它在包含范围[1..99]中,则它是与相应的带括号的组匹配的字符串。
并且您要求a.group()
等同于a.group(0)
,这是整场比赛。要求a.group(1)
将只给出括号中的捕获组。