Python 无法使用regex和re.findall()提取数字并求和
我尝试用正则表达式从文本文件中提取数字。之后,我创建总和 代码如下:Python 无法使用regex和re.findall()提取数字并求和,python,regex,Python,Regex,我尝试用正则表达式从文本文件中提取数字。之后,我创建总和 代码如下: import re def main(): sum = 0 numbers = [] name = input("Enter file:") if len(name) < 1 : name = "sample.txt" handle = open(name) for line in handle: stora
import re
def main():
sum = 0
numbers = []
name = input("Enter file:")
if len(name) < 1 : name = "sample.txt"
handle = open(name)
for line in handle:
storage = line.split(" ")
for number in storage:
check = re.findall('([0-9]+)',number)
if check:
numbers.append(check)
print(numbers)
print(len(numbers))
for number in numbers:
x = ''.join(number)
num = int(x)
sum = sum + num
print(sum)
if __name__ == "__main__":
main()
重新导入
def main():
总和=0
数字=[]
名称=输入(“输入文件:”)
如果len(name)<1:name=“sample.txt”
句柄=打开(名称)
对于线输入句柄:
存储=行。拆分(“”)
对于存储中的数字:
check=re.findall(“([0-9]+)”,数字)
如果检查:
数字。追加(检查)
打印(数字)
打印(len(数字))
对于数字中的数字:
x=''。加入(编号)
num=int(x)
sum=sum+num
打印(总和)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
问题是,如果此字符串“http://www.py4e.com/code3/“
我将add作为[4,3]
添加到列表中,然后汇总为43
。
你知道我该怎么解决这个问题吗?我假设你想得到7而不是43
number
变量是一个字符数组。因此,当您使用join
时,它将变成一个字符串
因此,您可以使用循环来迭代该数组,并将该数组的元素转换为int
,然后添加到sum
或
你可以这样做
import np
number np.array(number).astype('int').tolist()
如果所有元素的转换都是可能的,那么这将使字符数组转换为整数数组。我假设不是43,而是7
number
变量是一个字符数组。因此,当您使用join
时,它将变成一个字符串
因此,您可以使用循环来迭代该数组,并将该数组的元素转换为int
,然后添加到sum
或
你可以这样做
import np
number np.array(number).astype('int').tolist()
如果可以对所有元素进行转换,这将使字符数组转换为整数数组。我认为您只需更改
数字。将附加(检查)
到数字中。扩展(检查)
,因为您要将元素添加到数组中。您必须使用extend()
函数
此外,您不需要在正则表达式中使用(
)
我还尝试检查python上的代码
import re
sum = 0;
strings = [
'http://www.py4e.com/code3/',
'http://www.py1e.com/code2/'
];
numbers = [];
for string in strings:
check = re.findall('[0-9]+', string);
if check:
numbers.extend(check)
for number in numbers:
x = ''.join(number)
num = int(x)
sum = sum + num
print(sum)
我认为您只需更改数字。将附加(检查)
到数字中。扩展(检查)
,因为您希望向数组中添加元素。您必须使用extend()
函数
此外,您不需要在正则表达式中使用(
)
我还尝试检查python上的代码
import re
sum = 0;
strings = [
'http://www.py4e.com/code3/',
'http://www.py1e.com/code2/'
];
numbers = [];
for string in strings:
check = re.findall('[0-9]+', string);
if check:
numbers.extend(check)
for number in numbers:
x = ''.join(number)
num = int(x)
sum = sum + num
print(sum)
当我添加字符串而不是调用在您的代码中未正确处理的文件时,仅供参考。逻辑正则表达式正在运行两个FOR循环,并放置每个值及其自己的列表[[4]、[3]]。我想你的问题是在第一条语句中导入文件的方法。我用您询问的字符串替换了该文件“http://www.py4e.com/code3/“您可以在此处找到正在运行的代码
我在下面运行了这个方法,用数字列表调用一个字符串,效果很好
#### Final conditional loop
``` for number in numbers:
x = ''.join(number)
num = int(x)
sum = sum + num
print(str(sum)) ```
您也可以尝试使用范围或贴图:
for i in range(0, len(numbers)):
sum = sum + numbers
print(str(sum))
当我添加字符串而不是调用在您的代码中未正确处理的文件时,仅供参考。逻辑正则表达式正在运行两个FOR循环,并放置每个值及其自己的列表[[4]、[3]]。我想你的问题是在第一条语句中导入文件的方法。我用您询问的字符串替换了该文件“http://www.py4e.com/code3/“您可以在此处找到正在运行的代码
我在下面运行了这个方法,用数字列表调用一个字符串,效果很好
#### Final conditional loop
``` for number in numbers:
x = ''.join(number)
num = int(x)
sum = sum + num
print(str(sum)) ```
您也可以尝试使用范围或贴图:
for i in range(0, len(numbers)):
sum = sum + numbers
print(str(sum))
你的意思是你需要匹配独立的数字吗?如re.findall(r'\b[0-9]+\b',number)
?产生''的原因是什么。join(number)
?您也可以向我们显示文件内容。信息不足。您需要告诉我们您的预期结果。谢谢您的帮助,我可以通过Than Luong的建议解决方案来解决它。您的意思是您需要匹配独立的数字吗?如re.findall(r'\b[0-9]+\b',number)
?产生''的原因是什么。join(number)
?您也可以向我们显示文件内容。信息不足。您需要告诉我们您的预期结果。感谢您的帮助,我可以通过Than LUONG的建议解决方案来解决此问题