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

如何匹配文本行第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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:36:03