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

基于多分隔符的字符串子串匹配计数逻辑实现技术问询

问题描述

给定多行文本及三种分隔符:' @ '、' v '、' vs ',需对每行执行以下处理:

  1. 遍历所有分隔符,找到每个分隔符在文本中的所有出现位置
  2. 对每个分隔符位置,提取左侧4字符与右侧4字符,拼接为子串
  3. 校验所有拼接子串:
    • 若前两个子串不匹配,直接返回0
    • 若所有子串完全一致,返回子串的总数量

示例输入输出对应关系:

  • 输入:John @ Mary John v Mary John vs Mary → 输出:3
  • 输入:John v Mary Ben v Paul John v Mary → 输出:0
  • 输入:Hello World / John v Mary John @ Mary John vs Mary → 输出:3
  • 输入:John v Mary John vs Mary John @ Mary John v Mary → 输出:4
解决方案(Python实现)

通过循环遍历分隔符及每个分隔符的出现位置,收集子串后按规则校验,代码如下:

def count_matches(line):
    separators = [' @ ', ' v ', ' vs ']
    substrings = []
    
    # 遍历每个分隔符,收集所有拼接子串
    for sep in separators:
        pos = 0
        while True:
            idx = line.find(sep, pos)
            if idx == -1:
                break
            # 提取左右各4字符,去除可能的空格
            left = line[idx-4:idx].strip()
            right = line[idx+len(sep):idx+len(sep)+4].strip()
            substrings.append(left + right)
            pos = idx + len(sep)
    
    # 校验逻辑
    if not substrings:
        return 0
    # 前两个子串不匹配直接返回0
    if len(substrings) >= 2 and substrings[0] != substrings[1]:
        return 0
    # 检查所有子串是否一致
    ref = substrings[0]
    for s in substrings[1:]:
        if s != ref:
            return 0
    return len(substrings)

# 测试示例
test_cases = [
    'John @ Mary      John v Mary      John vs Mary',
    'John v Mary    Ben v Paul   John v Mary',
    'Hello World / John v Mary    John @ Mary    John vs Mary',
    'John v Mary   John vs Mary        John @ Mary     John v Mary'
]

for i, case in enumerate(test_cases, 1):
    print(f"示例{i}结果:{count_matches(case)}")
代码说明
  • 分隔符遍历:用find循环定位每个分隔符的所有出现位置,避免重复匹配
  • 子串提取:通过字符串索引截取目标字符,strip()处理分隔符前后的冗余空格
  • 校验逻辑:
    1. 无匹配子串时返回0
    2. 优先检查前两个子串,不匹配直接终止并返回0(符合需求的提前退出条件)
    3. 所有子串与第一个子串一致时,返回总数量;否则返回0

运行代码后输出:

示例1结果:3
示例2结果:0
示例3结果:3
示例4结果:4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:20:29