Python正则中量词默认贪婪,加?变为非贪婪;?必须紧贴量词后,仅控制当前量词匹配长度,不解决歧义或性能问题。
为什么默认是贪婪匹配,加问号才变非贪婪
Python 的
模块中,
、
、
、
这些量词默认都是「贪婪」的——它们会尽可能多地匹配字符,直到无法继续为止。比如
在
中会匹配整个
,而不是更早结束的
。
加问号(
)不是单独的量词,而是修饰前一个量词的「非贪婪模式开关」。它让匹配行为从“吃到撑”变成“够用就行”。
:匹配任意字符(除换行符),但尽可能少
:匹配任意字符,但尽可能多
:匹配数字,但一旦满足后续条件就停,比如在
中匹配
而非
(如果后面有约束)
实际写正则时,哪些地方必须加问号才能拿到想要的结果
典型场景是提取嵌套或重复结构中的最内层内容,比如 HTML 标签、括号对、引号字符串。不加问号,容易跨过中间边界,一锅端。
例如提取
中第一个
的内容:
立即学习
“
Python免费学习笔记(深入)
”;
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
:遇到第一个
就停,得到
re*+?{m,n}r'a.*b''aabab''aabab''aab'?.*?.*\d+?'123abc''1''123''hello
world'divimport re
text = 'helloworld'
print(re.search(r'(.*?)', text).group(1)) # 输出: hello
print(re.search(r'(.*)', text).group(1)) # 输出: helloworld
用
.*?hello.*