Python搜索值时输入单数字匹配到含该数的十位条目如何修正
问题原因
你当前使用的x in line属于子串匹配逻辑,当搜索关键词为ifDescr.7时,ifDescr.70的前半段刚好包含该子串,因此会被误判为匹配结果。
修复方案
只需要调整search_multiple函数中的匹配判断逻辑,将子串匹配改为完全匹配行内容即可适配你的需求,因为你的待搜索文件每行都是独立的ifDescr.xx条目。
修改后的完整代码
def search_multiple(file_name, list_of_strings): line_number = 0 list_of_results = [] # 搜索目标转集合可提升匹配效率,同时避免重复匹配同一条记录 target_set = set(list_of_strings) with open(file_name, 'r', encoding='utf-8') as read: for line in read: line_number += 1 # 去除行尾换行、空白后,和搜索目标完全相等才算匹配 clean_line = line.rstrip() if clean_line in target_set: list_of_results.append((clean_line, line_number, clean_line)) return list_of_results def main (): file_path = 'single.txt' verify1, verify2 = input("Input number").split() matched_lines = search_multiple(file_path, [f'ifDescr.{verify1}', f'ifDescr.{verify2}']) for x in matched_lines: print('Line = ', x[2]) if __name__ == '__main__': main()
补充适配方案
如果你的实际场景中,行内除了ifDescr.xx还有其他内容,可以改用正则匹配确保数字后缀完全匹配:
- 导入
re模块 - 将匹配逻辑改为
if re.search(rf'ifDescr\.{x}(\D|$)', line),其中(\D|$)表示数字后面要么是非数字字符,要么是行尾,避免匹配到70这类包含目标数字的更长数值。
内容的提问来源于stack exchange,提问作者Wu Ru
相关产品推荐
相关产品推荐

