Python正则默认单行匹配,.不匹配\n、^/$仅锚定首尾;启用re.DOTALL使.匹配换行符,re.MULTILINE使^/$逐行锚定,二者可组合使用,还支持内联语法与re.compile预编译提升效率。

Python 中正则表达式默认是单行匹配,即 . 不匹配换行符 \n,且 ^ 和 $ 只匹配字符串开头和结尾。要实现多行匹配(比如跨行查找、逐行锚定、点号匹配换行等),关键在于合理使用 re 模块的 flags 参数。
re.DOTALL:让 . 匹配换行符
默认情况下,. 表示“除换行符外的任意字符”。启用 re.DOTALL(或简写 re.S)后,. 会匹配包括 \n 在内的所有字符。
- 适用场景:匹配跨多行的块内容,如 HTML 标签对、JSON 字符串、注释块等
- 示例:
re.search(r'<p>(.*?)</p>', text, re.DOTALL)可匹配含换行的 p 内容 - 注意:过度使用可能导致匹配过长(贪婪匹配),建议配合
?非贪婪修饰
re.MULTILINE:改变 ^ 和 $ 的行为
启用 re.MULTILINE(或 re.M)后,^ 不仅匹配整个字符串开头,还匹配每行开头;$ 不仅匹配整个字符串结尾,还匹配每行结尾(即换行符前)。
- 适用场景:逐行处理日志、配置文件、代码片段(如找以 # 开头的注释行)
- 示例:
re.findall(r'^\s*#.*$', text, re.MULTILINE)可提取所有以 # 开头的行 - 注意:
\A和\Z始终只匹配整个字符串首尾,不受此 flag 影响
组合使用 flags:常见实用组合
多个 flag 可用按位或 | 连接,例如同时支持跨行匹配和多行锚定:
标签: python html js json 正则表达式 配置文件
还木有评论哦,快来抢沙发吧~