2012-03-22 51 views
-1

什么是匹配python中数字的最佳方式python pattern matching numbers

我想要做什么?

我读串行连接,输出是范围0 - 1023 但是有时我得到下面的字符串(它们被读作“STR”):

1023 
10?1023 
1023 

我匹配输出到字母表。 我使用的那一刻:

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 

或者,如果你要总结在一行上所有的整数:

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

我曾想过这个......但我从来没有真正明白如何使用'except'!它肯定比较简单;) – beoliver 2012-03-22 12:47:27

0

你的正则表达式是匹配的号码的字符串,所以结果是正确的......它匹配两组, 10和1023

如果你想确保你只有数字,你可以使用像

^\d+$ 
+0

我如何才能匹配空格后面的数字? – beoliver 2012-03-22 12:55:47

+0

\ d + \ s如果你只需要一个空格,或\ s +如果你可以有几个 – pcalcao 2012-03-22 13:04:51