2015-09-26 40 views
1

我有一个字符串作为提取串使用python re.match

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

看看这个[demo](http://ideone.com/HZA7wq)。 –

+0

stribizhev太谦虚了,把他的最佳答案只作为评论,并留下痕迹.... –

+0

不,我只是照顾我的2个孩子,我没有时间写一个完整的答案。很高兴你可以在别人的帮助下解决你的问题。周末愉快。 –

回答

2

问题是你要求的是整个比赛,而不仅仅是捕获组。从the manual

组([组1,...]) 返回匹配的一个或多个亚组。如果只有一个参数,结果是一个单独的字符串;如果有多个参数,则结果是每个参数有一个项目的元组。没有参数,group1默认为零(整个匹配被返回)。如果groupN参数为零,则相应的返回值是整个匹配的字符串;如果它在包含范围[1..99]中,则它是匹配相应括号组的字符串。

和您要求的a.group()相当于a.group(0)这是整个比赛。询问a.group(1)将只给出括号中的捕获组。

2

你可以要求由括号包围的组, 'a.group(1)',它返回

'my_feature_' 

另外,如果你的字符串总是以这种形式存在,你也可以使用字符串尾字符$并且使内部匹配lazy instead of greedy(所以它不会吞下_)。

a = re.match('sg_ts_([a-zA-Z_]*?)[_0-9]*$',st) 
+0

我不知道这个......谢谢史蒂夫 –