Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 卡在基本正则表达式上_Regex_Python 2.7 - Fatal编程技术网

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)