【Python】正则表达式re库
文章目录
- 函数
- re.match函数
- re.search函数
- re.findall函数
- re.compile函数
- re.sub函数
- re.split函数
- 修饰符
- 正则表达式模式
- 正则表达式实例
函数
re.match函数
re.match()函数用于尝试从字符串的 起始位置 匹配一个模式,匹配成功返回一个匹配对象,否则返回None。
函数语法:re.match(pattern, string, flags=0)
实例:
import re# case_01
print(re.match(r'\d{4}-\d{2}-\d{2}', '2023-03-15'))
print(re.match(r'\d{4}-\d{2}-\d{2}', 'date:2023-03-15'))# case_02
line = "Dogs are smarter than cats"matchObj = re.match(r'(.*) are (.*?) .*', line, re.M|re.I)if matchObj:print("matchObj.group() : ", matchObj.group())print("matchObj.group(1) : ", matchObj.group(1))print("matchObj.group(2) : ", matchObj.group(2))print("matchObj.group(1,2) : ", matchObj.group(1,2))print("matchObj.groups() : ", matchObj.groups())else:print("No match!")
结果如下:
使用 group(num) 或 groups() 匹配对象函数来获取匹配表达式:
group(num=0): 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups(): 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
re.search函数
re.search()函数用于扫描 整个字符串 并返回第一个成功的匹配,否则返回None。
函数语法: re.search(pattern, string, flags=0)
实例:
import re# case_01
print(re.search(r'\d{4}', 'abc1234'))
print(re.search(r'\d{4}', '123abc'))
print(re.search(r'\d{4}', 'abc0000d1234'))# case_02
line = "2斤黄瓜卖8.8元"pattern = r'(\d)斤(.*)卖(\d+(\.\d+)?)元'
matchObj = re.search(pattern, line, re.M|re.I)if matchObj:print(f'{matchObj.group(1)}\t{matchObj.group(2)}\t{matchObj.group(3)}')
else:print("No match!")
结果如下:
re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
而re.search匹配整个字符串,直到找到一个匹配。
re.findall函数
re.findall()函数用于在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,则返回元组列表,如果没有找到匹配的,则返回空列表。
函数语法: findall(string[, pos[, endpos]])
实例:
import re# case_01
content = "邮箱:qa@123.com;qa@456.com"
pattern = re.compile(r"""[a-zA-Z0-9-_]+@[a-zA-Z0-9]+\.[a-zA-Z]{2,4}
""", re.VERBOSE)result1 = pattern.findall(content)
result2 = pattern.findall(content, 0, 13)
print(result1)
print(result2)# case_02
result3 = re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
print(result3)
结果如下:
re.compile函数
re.compile()函数用于编译正则表达式,生成一个正则表达式( Pattern )对象。
函数语法: re.compile(pattern[, flags])
实例:
import repattern = re.compile(r'\d+')
print(pattern.match('abc123'))
print(pattern.match('abc123', 3, 5))
print(pattern.search('abc123'))
print(pattern.findall('abc123efg456'))
结果如下:
re.sub函数
re.sub()函数用于替换字符串中的匹配项。
函数语法: re.sub(pattern, repl, string, count=0, flags=0)
实例:
import recontent = '手机号码:13580536956'pattern = r'(1[3-9][0-9])\d{4}([0-9]{4})'print(re.sub(pattern, r'\1****\2', content)) #手机号码:135****6956
re.split函数
re.split()函数按照能够匹配的子串将字符串分割后返回列表。
函数语法: re.split(pattern, string[, maxsplit=0, flags=0])
实例:
import reprint(re.split('\W+', 'abc, 123, .!?'))
print(re.split('\W+', 'abc, 123, .!?', 1)) # 分隔1次
print(re.split('d', 'abc, 123, .!?')) # 找不到匹配的字符串不会分割
结果如下:
修饰符
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。多个标志可以通过按位 OR(|) 来指定。如 re.I | re.M 被设置成 I 和 M 标志。
修饰符 | 描述 |
---|---|
re.I | 使匹配对大小写不敏感 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解 |
正则表达式模式
修饰符 | 描述 |
---|---|
^ | 匹配字符串的开头 |
$ | 匹配字符串的末尾。 |
. | 匹配任意字符 |
[…] | 用来表示一组字符,单独列出:[abc] 匹配 ‘a’,‘b’或’c’ |
[^…] | 不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。 |
re* | 匹配0个或多个的表达式 |
re+ | 匹配1个或多个的表达式。 |
re? | 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式 |
re{n} | 精确匹配 n 个前面表达式。例如, o{2}不能匹配 “Bob” 中的 “o”,但是能匹配 “food” 中的两个o。 |
re{n,} | 匹配 n 个前面表达式。例如, o{2,} 不能匹配"Bob"中的"o",但能匹配 "foooood"中的所有 o。“o{1,}” 等价于 “o+”。“o{0,}” 则等价于 “o*”。 |
re{n, m} | 匹配n到m次由前面的正则表达式定义的片段,贪婪方式 |
a|b | 匹配a或b |
(re) | 对正则表达式分组并记住匹配的文本 |
\w | 匹配字母数字及下划线,等价于[a-zA-Z0-9_] |
\W | 匹配非字母数字及下划线,等价于[^a-zA-Z0-9_] |
\s | 匹配任意空白字符,等价于 [\t\n\r\f\v]。 |
\S | 匹配任意非空字符,等价于[^\t\n\r\f\v] |
\d | 匹配任意数字,等价于 [0-9]. |
\D | 匹配任意非数字,等价于[^0-9] |
\n, \t, 等. | 匹配一个换行符。匹配一个制表符。等 |
\1…\9 | 匹配第n个分组的内容。 |
正则表达式实例
实例 | 描述 |
---|---|
n位数字 | ^\d{n}$ |
至少n位数字 | ^\d{n,}$ |
m-n位数字 | ^\d{m,n}$ |
由26个小写英文字母组成的字符串 | ^[a-z]+$ |
Email地址 | ^\w+([-+.]\w+)@\w+([-.]\w+).\w+([-.]\w+)*$ |
手机号码 | ^(14[5|7]|(13|15|18)[0-9])\d{8}$ |
国内电话号码(0511-4405222、021-87888822) | \d{3}-\d{8}|\d{4}-\d{7} |
身份证号(15位、18位数字),最后一位是校验位,可能为数字或字符X | (^\d{15}$)|(^\d{17}(\d|X|x)$) |
密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线) | ^[a-zA-Z]\w{5,17}$ |
日期格式 | ^\d{4}-\d{1,2}-\d{1,2} |
【Python】正则表达式re库相关推荐
- Python正则表达式re库
1. 字符匹配 字符相关 import retext = "Hello World! 123alialiya啊123alialiya啊 Hello"""&quo ...
- 【转摘】PYTHON 正则表达式
网上转的一篇,把正则的规则系统的分类了.. 好文,共享,备查 ~~~~~~~~~~~ http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.ht ...
- Python正则表达式-2
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python正则表达式指南
Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表 ...
- python正则表达式指南_Python正则表达式指南
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- Python正则表达式指南上半部
本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...
- python正则表达式_Python正则表达式简记和re库!
正则表达式是定义搜索模式的字符序列.通常这种模式被字符串搜索算法用于字符串上的"查找"或"查找和替换"操作,或者用于输入验证. 1. 正则表达式的语法 . 表示 ...
- python正则表达式:re库的使用
一.re re库是Python中使用正则表达式需要用到的库,是Python的标准库,无需安装,直接导入 二.正则表达式的表示类型 1.raw string类型(原生字符串类型):如r'[1-9]\d{ ...
- Python常用标准库之正则表达式
Python常用标准库之正则表达式 1.re模块常用函数 1.1 匹配对象以及group()和groups()方法 1.2 match()与search():匹配单个目标 1.3 findall(): ...
- Python正则表达式,看这一篇就够了
作者 | 猪哥 来源 | 裸睡的猪(ID: IT--Pig) 大多数编程语言的正则表达式设计都师从Perl,所以语法基本相似,不同的是每种语言都有自己的函数去支持正则,今天我们就来学习 Python中 ...
最新文章
- 如何用python编写一个绘制马赛克图像的自写程序mask = np.zeros
- 在一个数组中找出和为目标值的那 两个 整数,并返回他们的数组下标python代码(Leetcode1)
- 用循环队列模拟银行窗口排队_银行告诉你什么是无锁队列
- javap(反汇编命令)详解
- 计算平面坐标某点(x,y)与原点(0,0)的角度
- Mongoexport导出数据,Mongoimport导入数据,mongodump备份数据,mongorestore恢复恢复
- 【线程安全】—— 单例类双重检查加锁(double-checked locking)
- Win10设置mac
- Linux之动态网页---搭建论坛
- es5创建对象与继承
- matlab函数文件||脚本文件和函数文件的区别
- 1.按钮点击的四种方式
- 教你如何正确提问的“九大准则”
- 2018计算机三级网络技术百度云,百度网盘2018旧版
- python路线寻优_基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进...
- iphone13预计上市时间 苹果13多少钱
- NTP网络授时服务器在电视播出系统中的应用
- 时序预测 | MATLAB实现贝叶斯优化CNN-LSTM时间序列预测(股票价格预测)
- mysql return more than 1 row_关于mysql错误:Subquery returns more than 1 row
- 【科普贴】LDO电源详解