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

Python非贪婪正则匹配特定字符串间内容及长度过滤问题

Python正则提取关键词间隐藏消息的解决方案

提取所有符合要求的隐藏内容

你之前的正则只排除了起始关键词@9>,没有排除结束关键词>9@,导致匹配逻辑存在漏洞。正确的正则需要同时确保提取的内容中不包含这两个关键词,且能处理连续出现的起始关键词场景:

import re

text = "Hello @9>ruur>9@ dafa  @9>ruerur>9@ @>ru@9>ruour>9@ur>@, @9>   @9>  @9> @9>@9>opp>9@@9>@9>iiiii>9@@9>@9>@9>@9> >9@>9@>9@>9@9>9@9>@"
# 核心正则:确保内容中不包含@9>或>9@
pattern = r"@9>((?:(?!@9>|>9@).)*)>9@"
matches = re.findall(pattern, text)
print(matches)

运行结果:
['ruur', 'ruerur', 'ruour', 'opp', 'iiiii', ' ']

正则逻辑说明:

  • @9> 精准匹配起始标记
  • (?:(?!@9>|>9@).)* 非捕获组,通过正向否定预查确保每一个字符都不会触发@9>或>9@,同时匹配任意字符,实现严格的非贪婪且无关键词的内容提取
  • >9@ 精准匹配结束标记

提取长度≥n的消息

有两种实现方式,按需选择:

1. 正则内直接限制长度

比如要提取长度≥3的内容,修改正则如下:

n = 3
pattern = r"@9>((?:(?!@9>|>9@).){" + str(n) + ",})>9@"
# 或者直接写死长度,比如n=3时:r"@9>((?:(?!@9>|>9@).){3,})>9@"
matches = re.findall(pattern, text)

2. 提取后过滤(更灵活)

先提取所有结果,再通过列表推导式过滤长度符合要求的内容:

n = 3
filtered_matches = [match for match in matches if len(match) >= n]

这种方式适合需要动态调整长度阈值或添加其他过滤条件的场景。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 11:57:24