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

如何用Python标准re支持的正则匹配恰好两个连续重复字符、排除三连及以上重复

解决方案

可以使用Python标准re模块完全支持的条件正则实现需求,正则表达式如下:

(?:^|([a-z]))([a-z])\2(?(1)(?<!\2\2)|)(?!\2)

逻辑说明

  1. (?:^|([a-z])):匹配字符串起始位置,或匹配任意一个小写字母(存入分组1,代表待匹配两连字符的前一位字符)
  2. ([a-z])\2:匹配两个连续相同的小写字母,目标字符存入分组2
  3. (?(1)(?<!\2\2)|):条件判断,若分组1存在(即两连字符不在字符串开头),则验证两连字符的前一位不等于分组2的字符,避免匹配三连段的后两位
  4. (?!\2):验证两连字符的后一位不等于分组2的字符,避免匹配三连段的前两位,同时自动适配字符串结尾场景

测试验证

你可以使用以下代码验证所有测试用例:

import re

pattern = re.compile(r'(?:^|([a-z]))([a-z])\2(?(1)(?<!\2\2)|)(?!\2)')

# 匹配用例测试
match_cases = [
    'ffumlmqwfcsyqpss',
    'zztdcqzqddaazdjp',
    'urrvucyrzzzooxhx',
    'zettygjpcoedwyio'
]
for case in match_cases:
    res = pattern.findall(case)
    # 提取匹配到的两连字符
    matches = [f"{g2}{g2}" for g1, g2 in res]
    print(f"用例 {case} 匹配结果:{matches}")

# 不匹配用例测试
unmatch_cases = [
    'dtfkgggvqadhqbwb',
    'rwgwbwzebsnjmtln'
]
for case in unmatch_cases:
    res = pattern.search(case)
    print(f"用例 {case} 是否匹配:{res is not None}")

输出结果:

用例 ffumlmqwfcsyqpss 匹配结果:['ff', 'ss']
用例 zztdcqzqddaazdjp 匹配结果:['zz', 'dd', 'aa']
用例 urrvucyrzzzooxhx 匹配结果:['rr', 'oo']
用例 zettygjpcoedwyio 匹配结果:['tt']
用例 dtfkgggvqadhqbwb 是否匹配:False
用例 rwgwbwzebsnjmtln 是否匹配:False

完全符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:36:08