Debugging 输出文件中所有字符串匹配项的行号

Debugging 输出文件中所有字符串匹配项的行号,debugging,Debugging,假设上面的函数在txt文件中查找出现匹配字符串的行号。但是,例如,如果我们正在搜索字符串“yes”,并且在第20行有字符串“yes”,在第51行有字符串“eyes”,那么函数将返回第20行和第51行,因为第51行在“eyes”中包含子字符串“yes”,如何修复此错误 好的,我已经通过将if-word-in-line:更改为if-word-in-re.split(“(\W+”),line: 通过这样做,我将这一行拆分为单词和标点符号,以找到精确的匹配 但我注意到另一个问题。例如,在第159行中有一

假设上面的函数在txt文件中查找出现匹配字符串的行号。但是,例如,如果我们正在搜索字符串“yes”,并且在第20行有字符串“yes”,在第51行有字符串“eyes”,那么函数将返回第20行和第51行,因为第51行在“eyes”中包含子字符串“yes”,如何修复此错误

好的,我已经通过将
if-word-in-line:
更改为
if-word-in-re.split(“(\W+”),line:

通过这样做,我将这一行拆分为单词和标点符号,以找到精确的匹配

但我注意到另一个问题。例如,在
第159行
中有一句“you”。单词
you
出现3次,函数只计算
you
第159行
中出现一次,程序打印出:

159

但我想让函数数三次,然后打印出来:

你有159159159


有什么办法吗?

如果word==line.strip()
替换
如果word=line.strip()

要在一行中包含重复的匹配项,可以使用以下方法:

关于findall(模式、字符串、标志=0)

返回字符串中模式的所有非重叠匹配项,作为字符串列表

只要替换这个:

def line_number(word, fname):
    with open(fname) as f:
        number_list = ""
        for i, line in enumerate(f, 1):
            if word in line:
                number_list += (str(i)+", ")      
        return number_list[:-2]
为此:

if word in line:

它不起作用,一个单词不能与一行完全匹配,对吗?你是对的,每行末尾都有一个换行符(\n)。我编辑我的答案。它也不起作用,打印无法显示行号。受strip()方法的启发,我尝试使用slpit()方法,将行分解为单词,然后找到匹配项。但是它出现了一个错误,说“'str'对象没有属性'slipt'”,我确定“line”是字符串类型并且可以拆分,你能告诉我这里发生了什么吗?首先你拼错了拆分:你为什么这么做<代码>返回号码列表[:-2]
谢谢,我已经解决了这个问题,但是我注意到还有一个问题,你能看一下吗?非常感谢!!!!这一个完全有效,它解决了查找额外子字符串的问题,并且计算了整个行!!
for match in re.findall(r'\b' + word + r'\b', line):