2014-03-12 49 views
1

我想隔離字符串中的數字。之前這些會直接來一個/在字符串中查找某種模式,爲什麼其他匹配?

後,我已經做到了這一點,其是足夠的:

a = "test0/0" 
print re.split("(\d)/(\d)", a) 

這與預期輸出所需的數字,但爲什麼測試,並會添加一個空白項到輸出?以及如何避免它。下面是打印的內容:

['test','0','0',''] 
+0

http://docs.python.org/2/library/re.html#re.split – ohaal

回答

3

通常的「0/0」只會得到['test', '']回來,但因爲你的正則表達式中包含括號,結果也返回這些捕捉到的元素分裂。

將圖案分割出來。如果在模式中使用捕獲括號,則模式中所有組的文本也會作爲結果列表的一部分返回。

如果您只是想捕獲數字而沒有其他,請嘗試re.search

import re 
a = "test0/0" 
print re.search("(\d)/(\d)", a).groups() 

結果:

('0', '0') 
1

在你輸入a你的0/0左側有test,並在右側有空。這就是爲什麼你分裂後最後得到一個空的原因。

1

這是怎麼re.split工作when you give it a capturing expression。 (捕獲表達式是一個包含捕獲匹配某個部分的括號的表達式。)它執行分割,但它也返回捕獲的值。你只需要捕獲的值;然而。鑑於你給特定的輸入,你可以只是做:

re.findall('\d', 'test0/0') 

但如果你輸入更復雜,可能要縮小這個倒位數字加上括號。

[d for d in s.split('/') for s in re.findall('\d/\d', a_string)] 

在後者的情況下,即使是a_string '100人喜歡8 TEST0/0' 的結果仍然是[0,0]

相關問題