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

如何在Python中编写匹配带间隔重复相同字符的可调正则表达式?

Python正则匹配带间隔的连续相同字符

需求说明

需要编写正则表达式,匹配连续的相同非空白字符,字符之间可穿插任意数量的空格或换行符,且相同字符的数量支持灵活调整。

匹配示例(以字符e为例)

  • 需匹配的情况:
    • eee(无间隔的连续相同字符)
    • e e e(空格间隔的相同字符)
    • 多行间隔的相同字符:
      e
      e
      e
      
  • 不匹配的情况:
    • ebe(中间夹不同字符)
    • e b e(中间夹其他非目标字符)
    • e e(仅2个相同字符,未达最低数量要求)

现有表达式的问题

你尝试的这两个表达式:

(\S)[\s\n]*\1{2}
(\S)(?:\s|\n)*\1{2}

存在局限性:它们只能匹配「第一个非空白字符 + 任意空白 + 连续两个无空白的相同字符」,无法处理每个相同字符之间都穿插空白的场景(比如e e e),因为表达式要求后面的相同字符必须连续无间隔。

正确的正则实现

基础版(匹配至少N个相同字符,N可调整)

若要匹配至少3个相同字符,使用以下表达式:

(\S)(?:\s*\1){2,}
  • 规则解释:
    • (\S):捕获一个非空白字符作为基准目标
    • (?:\s*\1):非捕获组,匹配「任意数量空白 + 基准字符」的组合
    • {2,}:要求该组合至少出现2次,加上最开始的1个字符,总数量即为至少3个

精确匹配版(匹配恰好M个相同字符)

如果需要精确匹配M个相同字符(比如恰好3个),只需修改数量限定符:

(\S)(?:\s*\1){2}

将{2,}改为{2},对应总数量为1+2=3个。

Python代码示例

import re

# 这里设置匹配至少3个相同字符,可修改{2,}中的数字调整数量
pattern = r'(\S)(?:\s*\1){2,}'
test_cases = [
    'eee',
    'e e e',
    '''e
e
e''',
    'ebe',
    'e b e',
    'e e'
]

for case in test_cases:
    match_result = re.search(pattern, case)
    print(f"测试内容: {repr(case)}")
    print(f"匹配结果: {'匹配成功' if match_result else '匹配失败'}\n")

补充说明

  • \s已经包含了空格、换行、制表符等所有空白类型,无需额外单独写\n
  • 如果需要调整匹配的字符范围(比如允许包含空白),可将\S替换为对应范围,比如用.匹配任意字符(需配合re.DOTALL标志让.包含换行)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:10:12