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

正则表达式非贪婪匹配失效求助:仅需捕获特定#Q/#/Q对

解决正则表达式贪婪匹配导致的配对问题

你当前的问题出在:原始文本中前几个#Q都没有对应的#/Q,非贪婪模式.*?会从第一个#Q开始,一直找到第一个出现的#/Q(也就是唯一的那个),所以会把前面所有#Q块都包含进去。

要精准捕获最后一个带闭合#/Q的#Q块,需要用负向预查排除中间出现新的#Q,确保只匹配从最后一个#Q到#/Q的内容:

import re

original_text = """Y8hg8yg

#Q
Toy Story::Cowboy?

#Q
Hello
?
World!

#Q
Toy ==Story==

#Q
This

is



Test
#/Q

#Q
Anither problem

djdjdjdidjfi8s8
"""

MATCHES = re.findall(r"#Q(?:(?!#Q).)*#/Q", original_text, re.DOTALL)
print(MATCHES[0])

正则逻辑说明:

  • #Q:匹配起始标记
  • (?:(?!#Q).)*:非捕获组,匹配任意字符(re.DOTALL模式下.包含换行),但前提是当前位置后不是#Q((?!#Q)为负向预查),避免跨越新的#Q标记
  • #/Q:匹配结束标记

运行后会得到你想要的结果:

#Q
This

is



Test
#/Q

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 10:11:03