正则表达式非贪婪匹配失效求助:仅需捕获特定#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
相关产品推荐
相关产品推荐

