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]
上述函数假设在txt文件中找到匹配字符串的行号。但是,例如,如果我们正在搜索字符串"是",我们有字符串"是"在第20行和"眼睛"在第51行,该函数将返回第20行和第51行,因为第51行包含一个子字符串" yes"在"眼睛",我该如何修复这个错误?
好的,我已将if word in line:
更改为if word in re.split('(\W+)', line):
通过这样做,我将行拆分为单词和标点符号以找到完全匹配。
但我发现了anohter问题。例如,在line 159
上,有一句话是"你是你。"单词you
出现3次,只有you
的函数在line 159
中出现一次,程序打印出来:
you 159
但是我想让这个函数计算3次并打印出来:
you 159, 159, 159
有什么办法吗?
答案 0 :(得分:1)
要在一行中包含重复匹配,您可以使用re.findall:
执行此操作重新查找(模式,字符串,标记 = 0)
返回 string 中 pattern 的所有非重叠匹配项,作为字符串列表
只需替换它:
if word in line:
用这个:
for match in re.findall(r'\b' + word + r'\b', line):
答案 1 :(得分:-1)
将if word in line
替换为if word == line.strip()
。