2011-11-02 24 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]+"