使用python re.match

时间:2015-09-26 09:12:16

标签: python regex

我有一个字符串

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

2 个答案:

答案 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)将只给出括号中的捕获组。