You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何修复正则匹配文件内容的结果显示格式?

解决方法:统计单词出现次数并格式化输出

我明白你想把原来逐行零散输出匹配结果的逻辑,改成统计目标单词总出现次数+汇总展示所有出现行号的格式,这就帮你调整代码:

首先我们需要先收集两个核心信息:目标单词在文件里的总出现次数,以及所有包含该单词的行号列表,再用这两个信息生成你想要的输出样式。以下是修改后的完整代码片段:

import re

def searchWord(self, selectedFile):
    fileToSearchInside = self.readFile(selectedFile)
    searchedSTR = self.lineEditSearch.text().strip()  # 去除首尾空格,避免无效搜索
    textList = fileToSearchInside.split('\n')
    total_count = 0
    line_numbers = []
    
    # 用enumerate直接获取从1开始的行号,替代手动维护counter
    for line_idx, myLine in enumerate(textList, start=1):
        # 转义目标单词里的正则特殊字符,确保匹配准确;\b保证匹配完整单词
        pattern = re.compile(r'\b' + re.escape(searchedSTR) + r'\b', re.IGNORECASE)
        matches = pattern.findall(myLine)
        if matches:
            total_count += len(matches)
            line_numbers.append(str(line_idx))  # 转成字符串方便后续拼接
    
    # 生成最终输出格式
    if total_count > 0:
        line_part = ' '.join([f'on line {num}' for num in line_numbers])
        output = f"{searchedSTR.lower()} exist {total_count} times {line_part}"
        print(output)  # 这里可以替换成你需要的UI展示逻辑
    else:
        print(f"{searchedSTR.lower()} does not exist in the file")

关键调整说明:

  • 用enumerate(textList, start=1)直接获取从1开始的行号,比手动维护counter更简洁不易出错
  • 加入re.escape(searchedSTR)转义目标单词中的特殊字符(比如.、*这类正则元字符),避免匹配逻辑出错
  • 用\b单词边界确保匹配完整单词(比如搜"if"不会误匹配"iff"),不需要的话可以去掉
  • 统计每行的匹配数量并累加到总次数,同时收集所有出现匹配的行号
  • 最后通过字符串拼接生成你想要的格式:[单词] exist [次数] times on line X on line Y...
  • 加入了大小写不敏感匹配(re.IGNORECASE),需要严格大小写的话可以移除这个参数

举个实际效果例子:如果"if"在第1行出现1次、第2行出现1次,输出就是:

if exist 2 times on line 1 on line 2

内容的提问来源于stack exchange,提问作者Pyt Leb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:48:30