拆分字符串并在字符串内添加数字

时间:2016-01-25 19:35:54

标签: python string

我如何分割字符串然后将内部的整数相加,使用下面的代码我可以添加单个整数,但如果我得到像“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

1 个答案:

答案 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):

enter image description 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