正则表达式re模块

正则表达式(RE)为高级文本模式匹配,以及搜索-替代等功能提供了基础。正则表达式(RE)是一 些由字符和特殊符号组成的字符串,它们描述了这些字符和字符的某种重复方式,因此能按某种模 式匹配一个有相似特征的字符串的集合,因此能按某模式匹配一系列有相似特征的字符串 。

在 Python 专门术语中,有两种主要方法完成模式匹配:搜索(searching)和匹配(matching)。搜索,即在字符 串任意部分中查找匹配的模式,而匹配是指,判断一个字符串能否从起始处全部或部分的匹配某个 模式。搜索通过 search()函数或方法来实现,而匹配是以调用 match()函数或方法实现的。 

下面为常用的匹配符合:

元字符说明
. 代表任意字符
| 逻辑或操作符
[ ] 匹配内部的任一字符或子表达式
[^] 对字符集和取非
- 定义一个区间
\ 对下一字符取非(通常是普通变特殊,特殊变普通)
* 匹配前面的字符或者子表达式0次或多次
*? 惰性匹配上一个
+ 匹配前一个字符或子表达式一次或多次
+? 惰性匹配上一个
? 匹配前一个字符或子表达式0次或1次重复
{n} 匹配前一个字符或子表达式
{m,n} 匹配前一个字符或子表达式至少m次至多n次
{n,} 匹配前一个字符或者子表达式至少n次
{n,}? 前一个的惰性匹配
^ 匹配字符串的开头
\A 匹配字符串开头
$ 匹配字符串结束
[\b] 退格字符
\c 匹配一个控制字符
\d 匹配任意数字
\D 匹配数字以外的字符
\t 匹配制表符
\w 匹配任意数字字母下划线
\W 不匹配数字字母下划线

常用的写法:

‘[a-zA-Z0-9]':匹配字母或数字
‘[^abc]':匹配除abc之外的字母
‘p(ython|erl)'匹配Python和perl
‘(pattern)*'匹配0次或多次
‘(pattern)+'匹配1次或多次
‘(pattern){m,n}'匹配m_n次
‘(a|b)*c'匹配0-n次a或b后面紧跟c
‘^[a-zA-Z]{1}([a-zA-Z0-9\._]){4,19}20(\w)6,20'匹配6-20个单词字符
‘^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}IP[azAZ]+'检查字符中只包含英文字母
‘\w+@(\w+\.)\w+$'匹配邮箱
‘[\u4e00-\u9fa5]'匹配汉字
‘^\d{18|\d{15}\d4\d1,2\d1,2(?=.[az])(?=.[AZ])(?=.\d)(?=.[,.]).8,)'判断是否为强密码
‘(.)\\1+'匹配任意字符的一次或多次出现

复制代码
# --*-- coding=utf-8--*--

import re # 导入re库

ptn = re.compile(r'hello')

# 使用ptn作为文本匹配
m1 = ptn.match('hello world')
m2 = ptn.match('')
print(m1)
print(m2)
# 如果匹配到返回结果,匹配不到返回None
# m1结果:<_sre.SRE_Match object; span=(0, 5), match='hello'>
# m2结果:None


# '^ab+'表示匹配以ab开头的字符串
m1 = re.search('^ab+', 'asbfrfgbbbb')
m2 = re.search('^ab+', 'absffdf')
print(m1)
print(m2.group())
# group分组显示
# m1结果:None
# m2结果:'ab'


# findall匹配所有符合的结果
m = re.findall('hello', 'helloword, ddddhellossss')
print(m)
# 结果:['hello', 'hello']


# finditer
# 与findall类似,只不过返回的结果是一个迭代器,而findall返回的是列表


# start返回匹配的开始位置
# end返回匹配的结束位置
m = re.search('^ab+', 'absffdf')
print(m.start(),m.end())
# 结果:0 2


# sub用于替换字符串中的匹配项
m = re.sub(' ','+','This is handsome boy')
print(m)
# 结果:This+is+handsome+boy


# split分割
m = re.split(' ','This is handsome boy')
print(m)
# 结果:['This', 'is', 'handsome', 'boy']
复制代码

 

 

posted @   Tynam.Yang  阅读(253)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示