Python多行匹配模式怎么写_flags使用解析【指导】

24次阅读

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

Python多行匹配模式怎么写_flags使用解析【指导】

Python 中正则表达式默认是单行匹配,即 . 不匹配换行符 n,且 ^$ 只匹配字符串开头和结尾。要实现多行匹配(比如跨行查找、逐行锚定、点号匹配换行等),关键在于合理使用 re 模块的 flags 参数。

re.DOTALL:让 . 匹配换行符

默认情况下,. 表示“除换行符外的任意字符”。启用 re.DOTALL(或简写 re.S)后,. 会匹配包括 n 在内的所有字符。

  • 适用场景:匹配跨多行的块内容,如 html 标签对、jsON 字符串、注释块等
  • 示例:re.search(r'<div>(.*?)</div>', text, re.DOTALL) 可匹配含换行的 div 内容
  • 注意:过度使用可能导致匹配过长(贪婪匹配),建议配合 ? 非贪婪修饰

re.MULTILINE:改变 ^ 和 $ 的行为

启用 re.MULTILINE(或 re.M)后,^ 不仅匹配整个字符串开头,还匹配每行开头;$ 不仅匹配整个字符串结尾,还匹配每行结尾(即换行符前)。

  • 适用场景:逐行处理日志、配置文件、代码片段(如找以 # 开头的注释行)
  • 示例:re.findall(r'^s*#.*$', text, re.MULTILINE) 可提取所有以 # 开头的行
  • 注意:AZ 始终只匹配整个字符串首尾,不受此 flag 影响

组合使用 flags:常见实用组合

多个 flag 可用按位或 | 连接,例如同时支持跨行匹配和多行锚定:

Python多行匹配模式怎么写_flags使用解析【指导】

Operator

OpenAI推出的AI智能体工具

Python多行匹配模式怎么写_flags使用解析【指导】 231

查看详情 Python多行匹配模式怎么写_flags使用解析【指导】

立即学习Python免费学习笔记(深入)”;

  • re.DOTALL | re.MULTILINE:. 匹配 n,且 ^/$ 作用于每行
  • re.IGNORECASE | re.DOTALL:忽略大小写 + 跨行匹配
  • re.VERBOSE 常搭配使用:允许在正则中加空格、注释,提升可读性(需手动换行书写)

写法示例:

pattern = r'''<script[^>]*>  # 开始标签<br>  (.*?)                                 # 内容(跨行)<br></script>  # 结束标签'''<br><code>re.search(pattern, html, re.DOTALL | re.VERBOSE)

flags 的其他写法与注意事项

flag 可通过三种方式传入:re.compile()、函数参数(如 re.search())、内联语法 (?i) 等。

  • 内联写法更灵活:如 r'(?s)(?m)^d+.*?end$' 相当于带 re.DOTALL|re.MULTILINE
  • 内联 flag 作用于其后部分,可局部控制,例如 (?i)abc(?-i)DEF 中只有 abc 忽略大小写
  • 编译后的 pattern 对象自带 flag,多次复用时推荐用 re.compile(..., flags=...) 提升性能
  • 避免重复传参:若已用 re.compile() 指定了 flag,调用 .search() 时无需再传 flags

text=ZqhQzanResources