基于多分隔符的字符串子串匹配计数逻辑实现技术问询
问题描述
给定多行文本及三种分隔符:' @ '、' v '、' vs ',需对每行执行以下处理:
- 遍历所有分隔符,找到每个分隔符在文本中的所有出现位置
- 对每个分隔符位置,提取左侧4字符与右侧4字符,拼接为子串
- 校验所有拼接子串:
- 若前两个子串不匹配,直接返回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()处理分隔符前后的冗余空格 - 校验逻辑:
- 无匹配子串时返回0
- 优先检查前两个子串,不匹配直接终止并返回0(符合需求的提前退出条件)
- 所有子串与第一个子串一致时,返回总数量;否则返回0
运行代码后输出:
示例1结果:3 示例2结果:0 示例3结果:3 示例4结果:4
内容的提问来源于stack exchange,提问作者Drewbty
相关产品推荐
相关产品推荐

