我想隔離字符串中的數字。之前這些會直接來一個/
在字符串中查找某種模式,爲什麼其他匹配?
後,我已經做到了這一點,其是足夠的:
a = "test0/0"
print re.split("(\d)/(\d)", a)
這與預期輸出所需的數字,但爲什麼測試,並會添加一個空白項到輸出?以及如何避免它。下面是打印的內容:
['test','0','0','']
我想隔離字符串中的數字。之前這些會直接來一個/
在字符串中查找某種模式,爲什麼其他匹配?
後,我已經做到了這一點,其是足夠的:
a = "test0/0"
print re.split("(\d)/(\d)", a)
這與預期輸出所需的數字,但爲什麼測試,並會添加一個空白項到輸出?以及如何避免它。下面是打印的內容:
['test','0','0','']
通常的「0/0」只會得到['test', '']
回來,但因爲你的正則表達式中包含括號,結果也返回這些捕捉到的元素分裂。
將圖案分割出來。如果在模式中使用捕獲括號,則模式中所有組的文本也會作爲結果列表的一部分返回。
如果您只是想捕獲數字而沒有其他,請嘗試re.search
。
import re
a = "test0/0"
print re.search("(\d)/(\d)", a).groups()
結果:
('0', '0')
在你輸入a
你的0/0
左側有test
,並在右側有空。這就是爲什麼你分裂後最後得到一個空的原因。
這是怎麼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]
。
http://docs.python.org/2/library/re.html#re.split – ohaal