匹配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语法。使用发电机时有没有办法排除总和?
答案 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+$