正则表达式
正则在线测试工具:https://regexr-cn.com/
正则练习网站:https://codejiaonang.com/
元字符
. * + ? \ [ ] ^ $ { } | ( )
匹配固定字符串
content = '身高:178,体重:168,学号:123456,密码:7654'
result = re.findall(r'7654', content)
print(result) # ['7654']
'''
findall表示匹配所有满足条件的字符串,如果有多少个满足的条件会全部匹配
由于字符串中可能会有一些特殊字符,r代表python不要去转义里面的的特殊字符
'''
匹配某一类字符
content = '身高:178,体重:168,学号:123456,密码:7654'
result = re.findall(r'\d', content)
print(result) # ['1', '7', '8', '1', '6', '8', '1', '2', '3', '4', '5', '6', '7', '6', '5', '4']
'''
\d代表数字
匹配字符串中的所有数字
'''
匹配重复某一类字符
content = '身高:178,体重:168,学号:123456,密码:7654'
result = re.findall(r'\d+', content)
print(result) # ['178', '168', '123456', '7654']
'''
+修饰的是前面的表达式
\d代表数字,+代表1到多个
\d数字开始 +表示多个,所以匹配出了每个完整的数字串
'''
匹配出座机号码
content = '手机号A:1778787877,手机号B:178817171,座机:0571-52122521'
result = re.findall(r'\d{4}-\d{8}', content)
print(result) # ['0571-52122521']
'''
\d表示数字
{number} 表示多少个数字
\d{4}是4个数字,-连接\d{8}匹配8个数字
'''
匹配多种情况
content = '手机号A:1778787877,手机号B:1718817171,座机:0571-52122521'
result = re.findall(r'\d{4}-\d{8}|\d{9}', content)
print(result) # ['177878787', '178817171', '0571-52122521']
'''
|表示或者的意思
|\d{9} 表示或者匹配9个数字
'''
匹配限定位置
content = '1778787877,手机号B:2718817171,座机:0571-52122521'
result = re.findall(r'^\d{5}|\d{4}-\d{8}', content)
print(result) #['17787', '0571-52122521']
'''
^表示在句子的开头,$表示在句子的结尾
'''
内部约束
content = 'barbar carcar harhel'
result = re.findall(r'(\w{3})(\1)', content)
print(result) [('bar', 'bar'), ('car', 'car')]
'''
\w表示字符,{3}表示3次
(\1)表示跟第一个括号的内容一致
'''
写正则表达式的五个步骤
- 1.确定包含几个子模式
- 2.各个部分的字符分类是什么
- 3.各个部分如何重复
- 4.是否有外部位置限制
- 5.是否有内部制约关系
语法规则
字符类表达式
a,啊:字符常量:写什么就是什么
\d:一个数字
\D: 一个非数字字符
\s: 一个空格
\S: 一个非空格
\w: 一个任意字母数字下划线字符
\W: 一个出了字母数字下划线之外的任意字符
[Aacs]: A,a,c,s 中的任意一个字符
[a-e]: 范围:从字母a到e的任意一个字符
[1-9]: 从数字1到9的任意一个字符
[^a-d]: 取反:除了a、b、c、d之外的任意字符
[\b]: 退格符号 Backspace
.: 统配符,除了换行\n之外的任意的一个字符
字符的重复次数,也叫做两次,比如身份证重复15或者18次,也就是\d{15}|\d{18}
重复次数-量词
* : 0或多个
+ : 1或多个
?: 0或1个
{2}:2个
{2,5}: 2到5个
{2,}: 至少2个
{,5}: 最多5个
组合模式
组合模式:多个模式拼在一起组成一个大的模式,比如\d{6}[a-z]{6}表示6个数字后跟6个小写字母
多种模式:用竖线|表示,两种模式都可以
分组模式:用括号()表示分组,分组后可以以租为单位应用两次,如(abc){3}表示abcacb'acb
位置
^字符串开头
\A:字符串开头,忽略m标记,不受换行m的影响
$:字符串行尾
\Z:字符串行尾,忽略m标记,不受换行m的影响
\b:单词边界,比如123abc123, \d\b匹配单词边界的最后一个数字就是3
\B:非单词边界:比如123abc123,\d\B匹配非单词边界的所有数字,12312,没有最后的3
(?=...):匹配...出现在之后的位置,我我测试32323,(?=测试).*,匹配测试32323
(?!...):匹配...不出现在之后的位置
(?<=...)匹配...出现在之前的位置
(?<!...)匹配...不出现在之前的位置
(?(|)):条件语句
分组
可以把一个正则表达式分成几个部分,可以重复某个分组或者指定两个分组必须相同等额外要求
(...)捕获一个组
(?P<Y>...) 捕获组名为Y
(?:...) 不捕获组
\Y:匹配第Y个匹配到的组
(?P=Y):匹配名为Y的组
(?#...) 注释
标记
i #忽略大小写
m #^和$匹配行首和行尾
s #.匹配换行符
x #允许空格和注释
\L #由当前语言区域决定 ,\w,|w,\b,\B 和大小写敏感匹配
(?iLmsux) #再正则表达式中设置标记
#语法
# 在文本参数后传入标记,格式:re.标记
re.split('\w', comtent, re.I)
特殊字符
\n 换行符
\r 回车符
\t tab符号
\YYY 八进制符号YYY
\xYY 16进制符号YY
替换
\g<0> 插入整段匹配
\g<Y> 插入匹配Y,Y可以是匹配的名字或者数字
\Y 插入名为Y的数组
python的re模块语法
re.search():查找符合模式的字符,只返回第一个,返回match对象
re.match():和search一样,但要求必须从字符串开头匹配,返回match对象
re.findall():返回所有匹配的字符串列表,返回对应内容
re.finditer():返回一个迭代器,其中包含所有的匹配,也就是Match对象
re.sub():替换匹配的字符串,返回替换完成的文本
re.subn():替换匹配的字符串,返回替换完成的文本和替换的次数
re.split():用匹配表达式的字符串做分隔符分割原字符串
re.compile():把正则表达式编译成一个对象,方便后面使用
match对象.group(param): 显示对象匹配的内容,param:如果有多个分组,可以指定数字显示第几个组的内容
match对象.groups():显示对象匹配内容,多个组返回元组展示
# search匹配示例
content = 'barbar carcar harhel'
result = re.search(r'ar', content) # match对象:<re.Match object; span=(1, 3), match='ar'>
print(result.group()) # 匹配到的第一个ar
# 分组匹配及返回示例
content = '010-12321312'
result = re.search(r'(\d+)-(\d+)', content) # 两个分最
print(result.group()) # 010-12321312 全部内容
print(result.group(1)) # 010 第一个组的内容
print(result.group(2)) # 12321312第二个组的内容
print(result.groups()) # ('010', '12321312')
# 替换示例
content = '010-12321312'
# 匹配要求-要替换成什么内容,匹配的文本
result = re.sub(r'010', '7', content)
print(result) # 7-12321312 将010替换成7
# 匹配要求-要替换成什么内容,匹配的文本
result = re.subn(r'010', '7', content)
print(result) # ('7-12321312', 1) ,(替换后的内容,替换了几次)
# 分割
content = 'foo,bar ; baz / qux'
'''
\s* 匹配空格
[,;/] 要分割的标记
\s* 匹配空格
'''
result = re.split(r'\s*[,;/]\s*', content)
print(result) # ['foo', 'bar', 'baz', 'qux']
风月都好看,人间也浪漫.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)