当前位置: 首页 > news >正文

Python的re模块

​Python re 模块常用功能与方法总结​

re 模块是 Python 的标准正则表达式库,用于字符串的匹配、查找、替换和分割。以下是其核心功能及常用方法:


​一、正则表达式基础语法​

符号说明示例
.匹配任意字符(除换行符)a.cabc, a&c
\d匹配数字(等价于 [0-9]\d\d42
\w匹配字母、数字、下划线\w+user_123
\s匹配空白字符(空格、制表符等)a\sba b
[ ]匹配括号内的任意字符[aeiou]a, e
^匹配字符串开头^abcabc123(开头)
$匹配字符串结尾xyz$123xyz(结尾)
*匹配前一个字符 0 次或多次a*bb, aaab
+匹配前一个字符 1 次或多次a+bab, aaab
?匹配前一个字符 0 次或 1 次a?bb, ab
{m,n}匹配前一个字符 m 到 n 次a{2,4}baab, aaaab
``或逻辑
( )分组捕获(abc)+abcabc

​二、常用方法​

​1. 匹配与搜索​

方法说明示例
re.match()​从字符串开头​​匹配模式(返回 Match 对象)re.match(r'\d+', '123abc')123
re.search()​扫描整个字符串​​查找匹配(返回第一个结果)re.search(r'\d+', 'abc123')123
re.findall()返回所有匹配的字符串列表re.findall(r'\d+', 'a1b22c333')['1', '22', '333']
re.finditer()返回所有匹配的迭代器(Match 对象)for m in re.finditer(r'\d+', 'a1b22'): print(m.group())

​2. 替换与分割​

方法说明示例
re.sub()替换匹配的子串re.sub(r'\d+', 'X', 'a1b2')aXbX
re.subn()替换并返回替换次数re.subn(r'\d+', 'X', 'a1b2')('aXbX', 2)
re.split()按模式分割字符串re.split(r'\d+', 'a1b22c')['a', 'b', 'c']

​3. 编译正则表达式​

pattern = re.compile(r'\d+')  # 预编译正则表达式
result = pattern.findall('a1b22c')  # ['1', '22']

​优势​​:复用正则对象,提高效率。


​三、Match 对象的方法​

通过 re.match()re.search() 返回的 Match 对象常用方法:

方法说明示例
m.group()返回匹配的字符串m.group(0)(等价于 m.group()
m.groups()返回所有分组的元组re.search(r'(\d+)-(\d+)', '123-456').groups()('123', '456')
m.start()匹配的起始位置m.start()
m.end()匹配的结束位置m.end()
m.span()返回 (start, end) 元组m.span()

​四、高级功能​

​1. 分组与命名分组​

# 普通分组
m = re.search(r'(\d{4})-(\d{2})', '2023-10')
print(m.groups())  # ('2023', '10')# 命名分组(Python 3.6+)
m = re.search(r'(?P<year>\d{4})-(?P<month>\d{2})', '2023-10')
print(m.group('year'))  # '2023'

​2. 非贪婪匹配​

*+ 后加 ? 实现最短匹配:

re.search(r'<.*?>', '<a> <b>').group()  # '<a>'(非贪婪)
re.search(r'<.*>', '<a> <b>').group()    # '<a> <b>'(贪婪)

​3. 预搜索断言​

语法说明示例
(?=...)正向肯定预查\w+(?=\.)file(匹配后跟 . 的单词)
(?!...)正向否定预查\d{3}(?!\d)123(匹配后不跟数字的3位数)
(?<=...)反向肯定预查(?<=\$)\d+100(匹配 $ 后的数字)
(?<!...)反向否定预查(?<!-)\d+123(匹配前面不是 - 的数字)

​五、实战示例​

​1. 提取邮箱地址​

text = "Contact: user@example.com, support@test.org"
emails = re.findall(r'[\w\.-]+@[\w\.-]+', text)
# ['user@example.com', 'support@test.org']

​2. 隐藏手机号中间四位​

phone = "13812345678"
hidden = re.sub(r'(\d{3})\d{4}(\d{4})', r'\1****\2', phone)
# '138****5678'

​3. 验证密码强度​

# 要求:至少8位,包含大小写字母和数字
pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$'
is_valid = bool(re.match(pattern, 'Passw0rd'))  # True

​六、注意事项​

  1. ​转义字符​​:正则中的 \ 需写成 \\ 或使用原始字符串 r'\d'
  2. ​性能优化​​:复杂正则建议预编译(re.compile)。
  3. ​贪婪匹配​​:默认贪婪,用 ? 改为非贪婪。
  4. ​Unicode支持​​:\w 能匹配中文(如 "你好"),但 [a-zA-Z] 不能。

​总结​

场景推荐方法
​验证字符串格式​re.match()re.fullmatch()
​提取内容​re.findall()re.finditer()
​替换文本​re.sub()
​复杂正则​预编译 re.compile()

官方文档:Python re 模块


文章转载自:

http://obsunr6Q.qfdmh.cn
http://LgFckrOX.qfdmh.cn
http://CM3CU2z7.qfdmh.cn
http://hgL0Tsf6.qfdmh.cn
http://dJbAs65T.qfdmh.cn
http://ACnOHTfT.qfdmh.cn
http://YKXHkzel.qfdmh.cn
http://NdwaHQrJ.qfdmh.cn
http://nSSg99CL.qfdmh.cn
http://rAxTPFjH.qfdmh.cn
http://VfhbftzN.qfdmh.cn
http://hYEGHNYi.qfdmh.cn
http://h84nxJY8.qfdmh.cn
http://NL5HpYhI.qfdmh.cn
http://7FinhWfX.qfdmh.cn
http://pBjTogII.qfdmh.cn
http://1BqH51e0.qfdmh.cn
http://ndopeYMb.qfdmh.cn
http://yxqTDPTx.qfdmh.cn
http://9HK7amnd.qfdmh.cn
http://lMvpSdTX.qfdmh.cn
http://vtvtg8eM.qfdmh.cn
http://tmeLy8Jf.qfdmh.cn
http://Mxt67Qdn.qfdmh.cn
http://tVBIl1iw.qfdmh.cn
http://ewmQFLzd.qfdmh.cn
http://dd0I0jHV.qfdmh.cn
http://0MlM2CPh.qfdmh.cn
http://tmPrFkc5.qfdmh.cn
http://YrZRbTZa.qfdmh.cn
http://www.dtcms.com/a/383468.html

相关文章:

  • 条件扩散过程(附录H)
  • selenium web自动化测试
  • docker compose 部署dify
  • 接口协议全解析:从HTTP到gRPC,如何选择适合你的通信方案?
  • 单例模式重新学习
  • 【系列文章】Linux中的并发与竞争[04]-信号量
  • Linux入门(二)
  • Transformer 面试题及详细答案120道(41-50)-- 训练与优化
  • UDP-Server(3)chat聊天室
  • 【不背八股】12.十大排序算法
  • 华清远见25072班网络编程学习day5
  • 【CMake】List
  • Linux系统中查找某个动态库例如.so文件是哪个软件安装的
  • c++ unqiue指针
  • ​Go语言实战案例 — 工具开发篇:编写一个进程监控工具​
  • Roo Code 的检查点功能
  • 【go/gopls/mcp】官方gopls内置mcp server使用
  • 【无标题】神经网络算法初探
  • Genspark AI 浏览器
  • Linux内核IPsec接收机制剖析:XFRM框架与xfrm4_input.c的深度解读
  • Linux 系统下的流量控制工具之tc命令案例解析
  • 数据库造神计划第五天---增删改查(CRUD)(1)
  • 深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)第九章知识点问答(10题)
  • AI表征了西方的有界,AI+体现了东方的无界
  • 前端基础 —— B / CSS基础
  • Qwen2.5-VL 实战:用 VLM 实现 “看图对话”,从目标检测到空间推理!【附源码】
  • vLLM - EngineCoreClient
  • MySQL专题Day(2)————存储引擎
  • 多文件编程与宏的使用
  • 第5节-连接表-Inner-Join