使用正则表达式将字符串列表转换为整数

时间:2016-08-19 11:27:29

标签: python regex

我目前正在尝试理解正则表达式。我很难理解如何解决这个问题:

import re

fhand = open("assign11.txt")

lst = list()
for line in fhand:
    line = line.rstrip()
    x = re.findall("([\d]+)", line)
    if not len(x) > 0: continue
    numlist = int(x[:])
    d = list.append(numlist)

print(lst)

我希望程序在re.findall()的帮助下匹配每个整数(0-9)的子字符串,然后将它找到的子字符串转换为整数,将它们附加到列表中,然后求它们起来。

Put我无法找到将每行中的所有子串转换为整数的方法,只有当我写int(x [0])时它才有效,但如果我写(x [:])则不行。如何将每个子字符串(当子字符串中有多个数字时)更改为整数?

2 个答案:

答案 0 :(得分:1)

使用map函数将字符串列表转换为整数列表。 map有两个参数:列表以及您希望应用于列表中每个元素的函数。

map(int, ['1','2'])
> [1,2]

完整流程的一个示例:

import re
string = "Hello this is number 1,2 and 3. We sum to 6. "
print sum(map(int, re.findall(r'\d+', string)))
>> 12

答案 1 :(得分:0)

使用列表推导将列表中的每个项目转换为新列表中的整数:

list_of_strings = ['1', '11', '123', '-12']
list_of_ints = [int(x) for x in list_of_strings]
>>> list_of_ints
[1, 11, 123, -12]

这是基本的想法。应用它来汇总文件中的所有整数:

import re

with open("assign11.txt") as fhand:
    numbers = []
    for line in fhand:
        numbers.extend(re.findall("([\d]+)", line))
    print(numbers)
    print(sum(int(x) for x in numbers))

此代码使用findall()numbers找到的添加到list.extend()列表中。 list.append()会添加re,findall()返回的列表,这不是您想要的。最后,数字字符串将转换为整数并计算总和。