2011-11-02 3 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()는 UCH 쉽고 빠르게입니다 :

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

위의 코드는 하나의 문자열로 문자열의 모든 번호를 병합합니다. 당신이 원하지 않는 경우, 파이썬 3.x에 적응

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

같은 조리법을 사용하는 것은 다음과 같습니다

>>> 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]+"으로 변경하십시오.