Python正则表达式查找所有数字不起作用

时间:2016-02-21 06:11:16

标签: python regex

出于某种原因,我的名为lst的列表总是为空,尽管myfile.txt包含分散在其中的数字。我无法弄清楚为什么。有人可以告诉我吗?谢谢!

import re
lst = ()

fname = "myfile.txt"
try:
    with open(fname, 'r') as fh:
        for line in fh:
            lst = [int(s) for s in re.findall(r'\b\d+\b',line)]
        print lst
except IOError:
    print "Error reading file!"

3 个答案:

答案 0 :(得分:1)

现在你没有在整个文件中累积数字,而是每次都替换列表。如果你打算全部拿到它们,那么这样的事情会更合适:

import re

lst = []

fname = "myfile.txt"
try:
    with open(fname, 'r') as fh:
        for line in fh:
            lst.extend(int(s) for s in re.findall(r'\b\d+\b',line))
        print lst
except IOError:
    print "Error reading file!"

答案 1 :(得分:1)

所以有几个问题,如果你想抓住每个数字,请不要使用' \ b \ d + \ b'因为这只会抓住不在单词前面或后面的数字。例如:它将获得" 23 street" - > ' 23'但如果你想得到第23街" - > ' 23'你需要使用' \ d + \'。否则其中一个评论是正确的,这是因为你的print lst在for循环之外。我愿意打赌myfile.txt的最后一行不包含任何数字,所以它永远不会打印任何东西。有几种方法可以解决它,我将向您展示两种方式。

import re
lst = ()

fname = "myfile.txt"
try:
    with open(fname, 'r') as fh:
        for line in fh:
            lst = [int(s) for s in re.findall(r'\d+',line)]
            print lst
except IOError:
    print "Error reading file!"

这是更简单的方法,你可以处理更少的代码,但如果你想在打印时让所有对象都存在于一个数组中,你也可以这样做。

import re
lst = []

fname = "myfile.txt"
try:
    with open(fname, 'r') as fh:
        for line in fh:
            lst.append([int(s) for s in re.findall(r'\b\d+\b',line)])
        print lst
except IOError:
    print "Error reading file!"

你会在第2行注意到这一点我把它变成了一个列表而不是一个元组。这样我们就可以在列表理解上使用.append,然后将其打印出来。

答案 2 :(得分:0)

with open(fname, 'r') as fh:

    data = fh.read()

    lst = re.findall(r'\b\d+\b',data)

    print lst