我写了一个代码
import re
inp=input("Please enter the file name ")
if len(inp)<1: inp = 'regex_sum_109744.txt'
fh=open(inp,'r')
sum=c=0
for i in fh:
i=i.rstrip()
s=re.findall('[0-9]+',i)
for j in s:
try:
u=float(s[c])
except:
#print("the thing is",j)
continue
sum=sum+u
#print("**********","the number is ",u,"the sum is ",sum,"************")
c=c+1
c=0
print(sum)
但是当我将[0-9]更改为[0-9。]时,输出开始拒绝整数
有人可以解释一下为什么会这样吗?
答案 0 :(得分:0)
您的问题与以下事实有关:您正在尝试将s[c]
转换为浮点数,但是如果无法完成,则不要增加c
(continue
在到达c=c+1
行之前)。这意味着在第一个匹配项转换失败后,您将继续为内循环的其余部分尝试相同的s[c]
,并继续失败。因此,您将永远不会匹配句号后在线上出现的数字。错误报告无济于事,因为它会打印j
,并在循环运行时更新。
当您已经对s[c]
列表中的值进行c=c+1
循环时,我根本不清楚为什么要执行for
和s
。只需尝试转换j
而不是s[c]
,它应该可以工作(然后可以从代码中完全删除c
)。您也可以将c=c+1
行的副本放在except
块中,但我确实不建议这样做。确实,我建议您进一步缩小except
的范围,以便仅处理ValueError
异常,甚至使用更复杂的正则表达式来匹配文本中的句点,因此您根本不需要try
/ except
。