如何匹配文本行第3次出现#分隔符后的精确指定字符串
问题根源
你当前的代码仅判断mapping_name是否作为子串存在于整行文本中,第4行的reversed_reversed包含reversed子串,所以会被误判命中,不符合「与第3次出现#之后的指定子串完全匹配」的要求。
调整方案
将每行内容用分隔符#切割为列表,取第3个#之后的第一个字段(切割后索引为3的元素,索引从0开始计数),直接判断该字段与mapping_name是否完全相等即可,同时可以增加长度校验避免索引越界,用上下文管理器处理文件IO更安全。
调整后代码
mapping_name = "reversed" wf_string = [] with open("/home/tester/test_file.txt", 'r', encoding='utf-8') as batch_file: for line in batch_file: # 去除行尾换行符避免影响匹配 cleaned_line = line.rstrip('\n') line_parts = cleaned_line.split('#') # 先校验分割后的字段数足够,再做匹配判断 if len(line_parts) >= 4 and line_parts[3] == mapping_name: print(cleaned_line) wf_string.append(cleaned_line)
逻辑说明
每行文本用#切割后,索引0对应第一次#之前的内容,索引1对应第一次和第二次#之间的内容,索引2对应第二次和第三次#之间的内容,索引3刚好是第三次#之后到下一个#之前的目标比对字段,只有该字段与mapping_name完全相等时才会被命中,最终仅会匹配到内容的第5行。
内容的提问来源于stack exchange,提问作者nmr
相关产品推荐
相关产品推荐

