2015-07-19 35 views
2

我需要找到一個字符串,可以採取兩種不同的形式:Python或在正則表達式和非空的結果

>>> test = '348249432' 
>>> x = re.findall("([2][0][0-9]{7})|([3][0-9]{8})", test) 
>>> x 
[('', '348249432')] 

我怎麼能要求的Python不返回空字符串,並只給我的結果,其中一個匹配可能已經完成了?

+3

使用'|'在一個組,這樣'R「([2] [0 ] [0-9] {7} | [3] [0-9] {8})「' – thefourtheye

+0

它的工作原理,非常感謝 – user2741700

回答

4

findall返回捕獲基團,在documentation指出:

如果一個或多個基團存在於該圖案,返回組的列表;如果模式有多個組,這將是一個元組列表。 空的比賽包含在結果中,除非他們觸及另一場比賽的開始

你想用一個捕獲組內交替,我會寫爲:

>>> test = '348249432' 
>>> re.findall("(20[0-9]{7}|3[0-9]{8})", test) 
['348249432']