Regex 卡在基本正则表达式上
任务:查找文本文件中的所有数字并计算其总和 链接到文件(如果需要):Regex 卡在基本正则表达式上,regex,python-2.7,Regex,Python 2.7,任务:查找文本文件中的所有数字并计算其总和 链接到文件(如果需要): 您需要将代码更改为: lst = [] with open(name) as f: for line in f: stuff = [lst.append(int(x)) for x in re.findall("[0-9]+", line.strip())] print sum(lst) 见 问题是您首先试图解析一个空字符串。当解析为int并附加到理解内部的列表(用lst=[]声明)时,可以避免弄乱空
您需要将代码更改为:
lst = []
with open(name) as f:
for line in f:
stuff = [lst.append(int(x)) for x in re.findall("[0-9]+", line.strip())]
print sum(lst)
见
问题是您首先试图解析一个空字符串。当解析为int并附加到理解内部的列表(用lst=[]
声明)时,可以避免弄乱空输出,得到的列表会自动展平
此外,您还需要实际读取中的文件。“with语句处理打开和关闭文件的操作,包括在内部块中引发异常时。f中的
for行将文件对象f
视为一个iterable,它自动使用缓冲IO和内存管理,因此您不必担心大文件。”()您的第一个正则表达式是正确的(您甚至可以将其更改为(\d+)
,但是,您需要一个全局修饰符和一个捕获组来保存找到的数字。请参阅。不,OP不必使用任何捕获组。re.findall
正在执行全局搜索。我发现Indexer:list index超出范围错误。@Stribizev:好的,不知道re模块会自动处理此问题。我更像是一个PHP家伙其中preg\u match\u all()
需要捕获组。@Jan:preg\u match\u all
也不需要捕获组:)从哪里读取文件?目前,name
只包含实际的文件名,而不包含内容,因此该行不包含您要查找的内容。我同意您的看法,但如果这是OP的原始代码(而不仅仅是经过编辑),那么他实际从文件中读取的内容是什么?目前,文件只打开了,但之后什么也没有发生,所以行
总是空的。我的意思是,当然应该在实际读取文件时使用。我只是在想,可能错误在其他地方。@Jan:谢谢你发现了这一点,我只是专注于解析内容的实际问题,而忽略了文件读取问题。
\s[0-9]+\s
.[0-9]+.
lst = []
with open(name) as f:
for line in f:
stuff = [lst.append(int(x)) for x in re.findall("[0-9]+", line.strip())]
print sum(lst)