Debugging 输出文件中所有字符串匹配项的行号
假设上面的函数在txt文件中查找出现匹配字符串的行号。但是,例如,如果我们正在搜索字符串“yes”,并且在第20行有字符串“yes”,在第51行有字符串“eyes”,那么函数将返回第20行和第51行,因为第51行在“eyes”中包含子字符串“yes”,如何修复此错误 好的,我已经通过将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行中有一
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):