使用正则表达式从文本文件提取的字符串的总和

2024-04-18 05:43:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在学习python,需要一些帮助来完成我的课堂作业。

我有一个文件,里面有文字和数字。一些行有一到三个数字,而其他行则完全没有数字。

我需要:

  1. 仅使用regex从文件中提取数字

  2. 求所有数字的和

我用正则表达式提取出所有的数字。我试图得到所有数字的总和,但我只是得到每行有数字的总和。我一直在用不同的方法来完成这项任务,这是我最接近完成任务的方法。

我知道我漏掉了一些关键部分,但我不知道我做错了什么。

这是我的代码:

import re
text = open('text_numbers.txt')

for line in text:
    line = line.strip()
    y = re.findall('([0-9]+)',line)

    if len(y) > 0:
        print sum(map(int, y))

我得到的结果是这样的 (每一个是一行的和):

14151

8107

16997

18305

3866

它必须是这样的一个和(所有数字的和):

134058


Tags: 文件方法代码textimportreline数字
3条回答

我不太懂python,但我可以给出一个简单的解决方案。 试试这个

import re
hand = open('text_numbers.txt')
x=list()
for line in hand:
    y=re.findall('[0-9]+',line)
    x=x+y
sum=0
for i in x:
    sum=sum + int(i)
print sum
import re
import np
text = open('text_numbers.txt')
final = []
for line in text:
    line = line.strip()
    y = re.findall('([0-9]+)',line)

    if len(y) > 0:
         lineVal = sum(map(int, y))
         final.append(lineVal)
         print "line sum = {0}".format(lineVal)
 print "Final sum = {0}".format(np.sum(final))

这就是你要找的吗?

我第一次尝试用正则表达式来回答这个问题,我发现阅读别人的代码是一项很好的技巧。

import re # import regular expressions
chuck_text = open("regex_sum_286723.txt")
numbers = []
Total = 0
for line in chuck_text:
    nmbrs = re.findall('[0-9]+', line)
    numbers = numbers + nmbrs 
for n in numbers:
    Total = Total + float(n)
print "Total = ", Total 

为了“理解列表”而喝一杯啤酒,虽然他的“r”似乎不需要,但不知道它是做什么的。但它读起来很漂亮,我读了两个像我的答案一样的循环,就更糊涂了

import re
print sum([int(i) for i in re.findall('[0-9]+',open("regex_sum_286723.txt").read())])

相关问题 更多 >