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

Python非贪婪正则为何仍匹配整串而非目标子串?

正则表达式贪婪性的误区解析

你的问题核心是混淆了?在正则里的两种不同用法:

  • 你写的(tt.+tt)?里的?,是作用在整个分组上的可选标记,意思是这个分组的内容可以出现0次或1次,完全没有改变+的贪婪属性。
  • 而+本身是贪婪量词,会尽可能匹配最长的符合条件的内容,所以tt.+tt会从第一个tt开始,一直匹配到最后一个tt,把整个字符串都包含进去,加上?只是让这个匹配变成可选,但只要能匹配到,还是优先选最长的结果。

如果你想提取_second_(也就是最后一对tt之间的内容),需要做两个调整:

  1. 把贪婪的+改成非贪婪的+?,让它匹配最短的符合条件的内容;
  2. 加上否定前瞻,确保匹配的是最后一组tt,避免匹配前面的tt_firstbutnotlast_tt。

对应的Python代码示例:

import re

input_string = "tt_firstbutnotlast_tt_second_tt"
# 匹配最后一对tt之间的内容
pattern = r"tt(.*?)tt(?!.*tt)"
match_result = re.search(pattern, input_string)
if match_result:
    print(match_result.group(1))  # 输出: _second_

如果只是想让tt.+tt匹配最短的可能(也就是第一组tt到第二个tt的部分),只需要把+改成+?即可,也就是用(tt.+?tt),但这和你想要的_second_无关,需要根据实际需求调整模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 01:27:40