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

如何使用Python正则匹配任意相邻重复的字符串?

如何使用Python正则匹配任意相邻重复的字符串?

嗨,我来帮你搞定这个需求!针对你要找**相邻且连续重复两次(中间无间隔)**的字符串,用Python的re模块就能轻松实现,下面给你一步步讲清楚:

核心正则表达式

首先直接上能用的正则:r'(.+)\1'

我给你拆解一下每个部分的作用:

  • (.+):这是一个捕获组,.+表示匹配任意非换行的字符(至少1个,毕竟要重复的内容总不能是空的),刚好符合你说的“在一行内”的要求。
  • \1:这是反向引用,意思是“完全重复第一个捕获组匹配到的内容”,这样就保证了前后两段是完全相同的相邻重复。

匹配你给出的示例

拿你举的几个例子测试一下:

  • FooFoo:捕获组会抓到Foo,\1精准匹配后面的Foo,完美命中;
  • Bar 1Bar 1:捕获组抓Bar 1,后面的Bar 1和它完全一致,匹配成功;
  • X1 Y2 Z3X1 Y2 Z3:同理,捕获组捕获X1 Y2 Z3,后面的重复部分刚好匹配。

Python代码示例

给你写个实际运行的代码片段,你可以直接测试:

import re

# 测试用的字符串列表,包含你的示例和几个测试用例
test_cases = [
    "FooFoo",
    "Bar 1Bar 1",
    "X1 Y2 Z3X1 Y2 Z3",
    "HelloWorld",  # 这个不会匹配,因为前后没有重复
    "AbcAbcAbc"    # 会匹配前6个字符"AbcAbc"
]

# 定义正则模式
pattern = r'(.+)\1'

for case in test_cases:
    # 查找所有匹配的重复单元
    matches = re.findall(pattern, case)
    if matches:
        print(f"在 '{case}' 中找到重复单元: {matches[0]}")
        # 如果想获取完整的重复字符串(比如"FooFoo"而不是"Foo"),可以用search取group(0)
        full_match = re.search(pattern, case).group(0)
        print(f"完整的重复字符串: {full_match}\n")
    else:
        print(f"'{case}' 中没有找到相邻重复的内容\n")

额外补充几个实用细节

  1. 获取完整重复字符串:如果你想要拿到整个重复的字符串(比如FooFoo)而不是重复的单元(Foo),可以用re.search()获取匹配对象,然后调用group(0),就像上面代码里演示的那样。
  2. 贪婪/非贪婪匹配:默认的(.+)是贪婪模式,会尽可能匹配最长的重复单元。如果想要匹配最短的(比如在aaaaa中优先匹配aa而不是aaaa),可以改成非贪婪模式r'(.+?)\1'。
  3. 匹配包含换行的情况:虽然你说内容在一行内,但如果之后需要处理跨换行的重复,可以加上re.DOTALL标志,让.能匹配换行符,比如re.search(pattern, text, re.DOTALL)。

备注:内容来源于stack exchange,提问作者Vegetable New Man

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.20 10:43:13