python模式匹配数字

时间:2012-03-22 12:42:46

标签: python regex generator

匹配python中的数字的最佳方法是什么

我想做什么?

我正在读取串行连接,输出范围为0 - 1023。 有时我会得到以下字符串(它们被读作'str'):

1023
10?1023
1023

我将输出与字母表匹配。 我正在使用的那一刻:

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

因为我认为发电机比列表理解更快。 但匹配会给我1033.理想情况下我希望它不会返回。

任何想法?,我想我只需要处理regrep语法。使用发电机时有没有办法排除总和?

2 个答案:

答案 0 :(得分: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
>>> 

答案 1 :(得分:0)

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

如果您想确保只有号码,可以使用类似

的内容
^\d+$