2012-03-22 5 views
-1

파이썬에서 숫자를 비교하는 가장 좋은 방법은 무엇입니까파이썬 패턴 일치 숫자

무엇을하려고합니까?

1023 
10?1023 
1023 

나는 일치하고있다 : 나는 문자열 다음 (그들은 'STR'로 읽습니다) 얻을 그러나 때때로 1023 - 내가 직렬 연결을 읽고있다

는, 출력 범위는 0이다 알파벳으로 출력. 내가 사용하고있는 순간 : 나는 발전기는 지능형리스트보다 더 빠를 것이라고 생각으로

input = '10?1023' 
print sum(int(x) for x in re.findall(r'\d+', input)) 

. 하지만 일치하면 1033이됩니다. 이상적으로는 아무 것도 반환하지 않으려합니다.

어떤 아이디어라도?, 나는 단지 regrep 구문에 대해 작업해야한다고 생각합니다. 발전기를 사용할 때 합을 제외하는 방법이 있습니까?

답변

3

올바르게 이해하면 None이 아닌 경우를 제외하고는 문자열을 정수로 형변환하려고합니다. 당신이 한 줄에 모든 정수를 요약하려면

try: 
    y = int(x) 
except ValueError: 
    y = None 

는 또는 : String의

>>> input = """1023 
... 10?1023 
... 1023 
... """ 
>>> 
>>> sum(int(line) if line.isdigit() else 0 for line in input.splitlines()) 
2046 
>>> 
+0

같은 것을 사용할 수 있습니다 만 번호가 있는지 확인하려면 1023 ...하지만 나는 'except'를 어떻게 사용하는지 결코 이해하지 못했다! 그것은 분명 간단하다;) – beoliver

0

귀하의 정규식이 일치되는 번호, 그래서 결과가 정확 ...이 두 그룹을 일치 10

당신은 당신이 당신은 내가 이것에 대해 생각했다

^\d+$ 
+0

공백이 뒤 따르는 숫자 만 어떻게 일치시킬 수 있을까? – beoliver

+0

하나의 공백 만 원하면 \ d + \ s, 여러 공백을 원하면 \ s + – pcalcao