使用正则表达式

时间:2015-12-09 06:23:22

标签: python regex sum

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

我有一个包含文字和数字的文件。有些行有一到三个数字,有些则根本没有数字。

我需要:

  1. 仅使用正则表达式

  2. 从文件中提取数字
  3. 查找所有数字的总和

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

    我知道我错过了一些关键部分,但我不确定我做错了什么。

    这是我的代码:

    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

10 个答案:

答案 0 :(得分:2)

我不太了解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

答案 1 :(得分:2)

我第一次尝试使用正则表达式来回答,我发现练习它是一项非常棒的技巧,即阅读其他代码。

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())])

答案 2 :(得分:1)

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))

这就是你要找的东西吗?

答案 3 :(得分:0)

import re
text = open('text_numbers.txt')
data=text.read()
print sum(map(int,re.findall(r"\b\d+\b",data)))

使用.read获取string格式的内容

答案 4 :(得分:0)

import re
sample = open ('text_numbers.txt')
total =0
dignum = 0 

for line in sample:
    line = line.rstrip()
    dig= re.findall('[0-9]+', line)

    if len(dig) >0:
        dignum += len(dig)
        linetotal= sum(map(int, dig))
        total += linetotal

print 'The number of digits are:  ' 
print dignum
print 'The sum is: '
print total     
print 'The sum ends with: '
print  total % 1000

答案 5 :(得分:0)

import re
print sum([int(i) for i in re.findall('[0-9]+',open(raw_input('What is the file you want to analyze?\n'),'r').read())])

你可以将它压缩成一行,但这只是为了好玩!

答案 6 :(得分:0)

这是我解决这个问题的方法。

import re

file = open('text_numbers.txt')
sum = 0 

for line in file:
    line = line.rstrip()
    line = re.findall('([0-9]+)', line)
    for i in line:
        i = int(i)
        sum += i    

print(sum)

第一个 for 循环中的线元素也是列表,我使用第二个用于循环将其元素从字符串转换为整数我可以总结一下。

答案 7 :(得分:0)

import re

fl=open('regex_sum_7469.txt')
ls=[]

for x in fl: #create a list in the list
   x=x.rstrip()
   print x
   t= re.findall('[0-9]+',x) #all numbers
   for d in t: #for loop as there a empthy values in the list a
        ls.append(int(d))
print (sum(ls))

答案 8 :(得分:0)

这是我的代码:

f = open('regex_sum_text.txt', 'r').read().strip()
y = re.findall('[0-9]+', f)
l = [int(s) for s in y]
s = sum(l)
print(s)

另一种更短的方法是:

with open('regex_sum_text.txt', 'r') as f:
    total = sum(map(int, re.findall(r'[0-9]+', f.read())))

print(total)

答案 9 :(得分:0)

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