2015-09-26 65 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

我不知道這個......謝謝史蒂夫 –