专业的JAVA编程教程与资源

网站首页 > java教程 正文

Python 正则表达式教程 第 3 章:匹配模式(Flags)

temp10 2025-09-24 03:45:30 java教程 2 ℃ 0 评论

点击头像,进入个人中心,查看文章合集,还有更多Python相关的精彩教程等着你!

在前两章,我们学习了 基础语法分组捕获
本章我们将学习 正则匹配模式(Flags) —— 它们可以改变正则的匹配行为。

Python 正则表达式教程 第 3 章:匹配模式(Flags)

Python 提供了多种模式,可以在 re.compile() 或者 方法调用时指定


3.1 常用匹配模式(Flags)

Flag

名称

作用

示例

re.I 或 re.IGNORECASE

忽略大小写

abc 可匹配 ABC


re.M 或 re.MULTILINE

多行模式,^ 和 $ 匹配每一行开头/结尾

^abc 可匹配多行中的 abc


re.S 或 re.DOTALL

点号 . 可以匹配换行符

a.b 可以跨行匹配


re.X 或 re.VERBOSE

忽略正则中的空格和注释,使表达式更清晰

可写多行注释版正则


re.A 或 re.ASCII

仅匹配 ASCII 字符(对 \w、\d、\s 生效)

\w 只匹配 [a-zA-Z0-9_]



3.2 忽略大小写 re.I

import re

pattern = re.compile(r"hello", re.I)
text = "Hello WORLD"

match = pattern.search(text)
print(match.group())  # Hello

3.3 多行模式 re.M

默认情况下:

  • ^ 只匹配字符串开头
  • $ 只匹配字符串结尾

开启 re.M 后:

  • ^ 匹配每一行的开头
  • $ 匹配每一行的结尾
import re

text = """first line
second line
third line"""

pattern = re.compile(r"^(\w+)", re.M)  
matches = pattern.findall(text)
print(matches)  # ['first', 'second', 'third']

3.4 点号匹配换行 re.S

默认 . 不会匹配换行符。

import re

text = "Hello\nWorld"
print(re.findall(r"Hello.World", text))        # []
print(re.findall(r"Hello.World", text, re.S))  # ['Hello\nWorld']

3.5 可读模式 re.X

有些正则表达式太复杂,可以使用 re.X 来分行写,并加注释。

示例:匹配邮箱地址

import re

pattern = re.compile(r"""
    ^               # 开头
    [a-zA-Z0-9_.]+  # 用户名
    @               # @符号
    [a-zA-Z0-9.-]+  # 域名
    \.              # 点号
    [a-zA-Z]{2,6}   # 顶级域名
    $               # 结尾
""", re.X)

print(pattern.match("user_name123@example.com"))

3.6 ASCII 模式 re.A

import re

text = "abc123中文"

print(re.findall(r"\w+", text))           # ['abc123中文']
print(re.findall(r"\w+", text, re.A))     # ['abc123']

3.7 组合多个模式

可以用 | 或 + 组合模式:

import re

text = "Hello\nWorld"
pattern = re.compile(r"hello.world", re.I | re.S)

print(pattern.search(text).group())  # Hello\nWorld

3.8 图示:Flags 的影响

例子:匹配字符串 "Hello\nWorld"

正则

Flags

匹配结果

Hello.World

默认

不匹配

Hello.World

re.S

Hello\nWorld

hello.world

`re.I

re.S`


本章你学到了:

  • 常用 Flags(I 忽略大小写、M 多行、S 点号匹配换行、X 可读模式、A ASCII 匹配)
  • 如何组合多个模式
  • 实例:跨行匹配、邮箱验证

下一章(第 4 章),我们会学习 匹配贪婪与非贪婪模式,解决正则“匹配太多”的问题。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表