我如何分割字符串然后将内部的整数相加,使用下面的代码我可以添加单个整数,但如果我得到像“a12b34”这样的字符串我应该能够做到12 + 34不是1 + 2 + 3 + 4,如下面的代码所示。我能用C做到这一点,但我不知道如何100%在python中做到这一点。
strTest = str(raw_input("Enter an alphanumeric string: "))
total = 0
for ch in strTest:
if ch.isdigit() == True:
total = total + int(ch)
print total
答案 0 :(得分:3)
用户re.findall
提取所有数字,将其转换为整数,然后对结果求和
>>> import re
>>> s = 'a12b34'
>>> total = sum(map(int,re.findall(r'-?\d+', s))) # -? is to cover negative values
46
仅当您有整数
时才有效编辑:
对于一般情况,您可能还有浮点数,请考虑以下事项:
>>> s = 'a12b32c12.0d11.455'
>>> sum(map(float, re.findall(r'-?\d+\.?\d+', s)))
67.455
>>> s = 'a12b-32c12.0d-11.455'
>>> sum(map(float, re.findall(r'-?\d+\.?\d+', s)))
-19.455
<强> EDIT2:强>
发生了什么:
1 - import re
将导入并加载re
模块,该模块是用于根据提供的模式提取复杂字符串格式的模块。更多详情here
2 - re.findall
将使用提供的模式s
r'-?\d+\d.>\d+'
中所有匹配的字符串
3 - 模式r'-?\d+\d.>\d+
细分(可以找到here):
4 - 现在,re.findall
将返回所有匹配的列表:
>>> s = 'a12b-32c12.0d11.455'
>>> re.findall(r'-?\d+\.?\d+', s)
['12', '-32', '12.0', '11.455']
5 - map
会将此列表中的每个元素从字符串转换为float,返回一个生成器:
>>> map(float, re.findall(r'-?\d+\.?\d+', s))
<map object at 0x0000000003873470>
>>> list(map(float, re.findall(r'-?\d+\.?\d+', s)))
[12.0, -32.0, 12.0, -11.455]
6 - 将map
的结果传递给sum
会将所有元素归为总数:
>>> sum([12.0, -32.0, 12.0, -11.455])
-19.455