2011-11-02 68 views
1

例子:加入製作數字轉換成int

import re 
rx = re.compile("{0-9}") 
Var1 =bla bla bla 54467 
Var2= rx.findall(Var1) 
number = ''.join(Var2) 

我的問題是如何轉換爲數字的變量爲int,我嘗試用int()函數這樣做,但我得到一個錯誤。 或者有沒有辦法用另一種方法創建一個像int這樣的變量?

回答

4

請勿對此使用正則表達式。 filter()是五臟俱全更容易和更快:

>>> s = "bla bla bla 54467 bla" 
>>> int(filter(str.isdigit, s)) 
54467 

上面的代碼將字符串中的所有數字合併爲一個字符串。如果你不想這樣,使用

>>> s = "bla 1223 bla 54467 bla" 
>>> map(int, filter(str.isdigit, s.split())) 
[1223, 54467] 

適用於Python 3.x都有同樣的食譜是:

>>> s = "bla bla bla 54467 bla" 
>>> int("".join(filter(str.isdigit, s))) 
54467 
>>> s = "bla 1223 bla 54467 bla" 
>>> list(map(int, filter(str.isdigit, s.split()))) 
[1223, 54467] 
+0

地圖功能給我其他輸出不喜歡你在這裏。它給了我那個輸出:<地圖對象在0x1beb250>。我想得到你在這裏的輸出,怎麼樣? –

+0

和int()當你在這裏寫它也不工作,它給我一個錯誤,它不喜歡轉換過濾器。 –

+0

@HananN .:我的解決方案是針對Python 2.x的。你沒有說你正在使用Python 3.x,95%的用戶仍在使用2.x. –

4

你的正則表達式是錯誤的。以下作品:

import re 
rx = re.compile("[0-9]") # note the change 
Var1 ='bla bla bla 54467 bla' 
Var2= rx.findall(Var1) 
number = int(''.join(Var2)) 
print number 

注意上面的代碼會發現所有的數字裏面的字符串,不管他們是否是連續的,並把它們合併成一個單一的數字。要獲得連續數字的組,請將您的正則表達式更改爲"[0-9]+"