网站首页 > java教程 正文
点击头像,进入个人中心,查看文章合集,还有更多Python相关的精彩教程等着你!
在前两章,我们学习了 基础语法 和 分组捕获。
本章我们将学习 正则匹配模式(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 章),我们会学习 匹配贪婪与非贪婪模式,解决正则“匹配太多”的问题。
- 上一篇: 正则表达式测试工具_正则 测试
- 下一篇: Python学不会来打我(56)正则表达式语法总结
猜你喜欢
- 2025-09-24 30个Excel/WPS新公式实战大全,效率翻倍不是梦!
- 2025-09-24 Ngnix的server_name正则匹配执行顺序
- 2025-09-24 学习VBA,报表做到飞 第四章 正则表达式 4.12 正则表达式与数组结合
- 2025-09-24 用正则表达式解代数方程_用正则表达式解代数方程怎么写
- 2025-09-24 Django路由配置方法全解_请简述django的url路由流程
- 2025-09-24 这几种正则表达式的“字符集合”,想要入门regexp函数,必须了解
- 2025-09-24 玩转Spring中强大的spel表达式!_spring的scope有几种
- 2025-09-24 Python中使用正则表达式_python 正则表达
- 2025-09-24 Python 正则表达式教程 第 4 章:贪婪与非贪婪匹配
- 2025-09-24 5分钟掌握Python(十六)之正则表达式
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)