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

求可匹配任意重复句子的优雅通用正则表达式方案

匹配任意数量重复句子的通用正则表达式

现有实现

我已经写了一个支持最多3句重复匹配的正则,通过扩展模式可以支持指定最大重复句数,正则为:
(.*?\.)( .*?\.)?( .*?\.)? \1\2?\3?

这个正则能处理1句、2句或3句的重复场景,Python使用示例:

import re

string = 'Red apple. Green pepper. Yellow onion. Red apple. Green pepper. Yellow onion.'
output = re.sub(r'(.*?\.)( .*?\.)?( .*?\.)? \1\2?\3?', r'\1\2\3', string, flags=re.MULTILINE)
print(output)  # 输出:Red apple. Green pepper. Yellow onion.

通用解决方案

要实现匹配任意数量连续重复句子的优雅通用正则,可以用捕获组匹配一个或多个句子组成的块,再匹配该块的重复内容,正则表达式如下:
((?:.*?\.)(?: .*?\.)*) \1

正则解析

  • (?:.*?\.):非捕获组,匹配单个以句号结尾的句子(非贪婪匹配,避免过度匹配)
  • (?: .*?\.)*:非捕获组,匹配零个或多个后续句子,每个句子前带空格
  • ((?:.*?\.)(?: .*?\.)*):捕获组,匹配由1个或多个连续句子组成的完整块
  • \1:匹配空格后重复的该句子块

Python示例

import re

# 测试2句重复场景
test_str_1 = 'Hello world. This is a test. Hello world. This is a test.'
result_1 = re.sub(r'((?:.*?\.)(?: .*?\.)*) \1', r'\1', test_str_1, flags=re.MULTILINE)
print(result_1)  # 输出:Hello world. This is a test.

# 测试多句重复场景
test_str_2 = 'Line 1. Line 2. Line 3. Line 4. Line 1. Line 2. Line 3. Line 4.'
result_2 = re.sub(r'((?:.*?\.)(?: .*?\.)*) \1', r'\1', test_str_2, flags=re.MULTILINE)
print(result_2)  # 输出:Line 1. Line 2. Line 3. Line 4.

注意事项

  • 如果需要匹配跨换行的重复句子块,保留re.MULTILINE标志的同时,可将空格部分调整为[ \n]以兼容换行分隔的情况
  • 若句子中包含缩写等带句号的特殊情况,需要将.*?替换为更精准的匹配规则(例如[^.]*来匹配不含句号的内容)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:25:18