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

时间:2014-06-01 21:49:18

标签: debugging

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

有什么办法吗?

2 个答案:

答案 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()