目录
前言
正则表达式(Regular Expression,简称 regex 或 regexp)是一种用来描述字符串匹配模式的强大工具。它提供了一种灵活的方式来搜索、匹配和替换文本中的字符串。正则表达式由普通字符(如字母、数字)和特殊字符(元字符)组成,这些特殊字符用来定义模式的规则。
使用正则表达式的背景:
strs = "jshdfkjshd\sdf/gasg.sd<<asd,1123-"
之前学过的字符串处理方法里分割字符是使用split.()。按照括号里的字符分割字符串。但对于上述strs字符串,字符很多,或者字符串很长很杂。这时想要取出自己想要的内容,就要使用正则表达式来提取。
元字符
正则表达式用来匹配要取数据类型的字符
匹配的范围
用*表示任意个字符(包括0个),
用+表示至少一个字符,
用?表示0个或1个字符,
用{n}表示n个字符,
用{n,m}表示n~m个字符
正则表达式
1.import re
导入re模块
2.re.match(r"匹配的规则",所要匹配的字符串)
使用re模块里的match方法进行匹配,其中r的使用是为了避免字符串里的转义字符影响匹配的规则,下面代码中的"-"是精准匹配字符串里的"-"。
# 正则表达式
import re
if __name__ == '__main__':
phone_num = "0551-1234567899"
print(re.match(r"\d{4}-\d{3,8}", phone_num))
3.匹配一个变量名
[A-Za-z_]的含义是能够匹配大写字母A到Z,小写字母a到z和下划线_,"-"在正则表达式里表示从什么到什么。\w*的含义是匹配0至任意个字母数字或者下划线。
[pP]的含义是,p或者P
#匹配一个变量名称
print(re.match(r"[A-Za-z_]\w*", ""))
print(re.match(r"[pP]ython","python"))
4.转义字符的匹配
print("ABC\\001")
print(re.match(r"\w+\\\d+","ABC\\001"))
输出:\w+匹配前面的字母,\\精准匹配原字符串里的\\,\d+匹配后面的数字
ABC\001
5.分组匹配
匹配时间:注意每个位数的大小范围
# 分组使用的是在正则内部使用 括号 第几个括号就是第几个组别
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).groups())
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(1))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(2))
print(re.match(r"([0-1]\d|2[0-3]):([0-5]\d):([0-5]\d)", t).group(3))
输出:([0-1]\d|2[0-3]) 这里的|也表示或者的意思 ,注意group()输出时从1开始,而不是列表和字符串里的从0开始
('19', '59', '59')
19
59
59
6.贪婪匹配
正则匹配默认是贪婪匹配,也就是匹配尽可能多的字符。
# 贪婪匹配
# 怎么结束贪婪匹配 ? 结束贪婪匹配
# ^表示以什么开头 $ 表示以什么结尾
num = "102333330002000"
num1 = "102333000000"
num2 = "1023333000000"
num3 = "103333000000"
num4 = "133333000000"
print(re.match(r"^(\d+?)(0+)$", num).groups()) # 以数字开头,贪婪匹配至以0结尾,且中间全是0的字段的开头结束,且匹配的字段也必须以0结尾,不然会报错
输出:^表示开头,$表示结尾。
('102333330002', '000')
7.预编译
类似于自定义函数
num1 = "1023330001000"
num2 = "10233330001000"
num3 = "1033330001000"
num4 = "1333330001000"
# 预编译
# 如果大家规则都类似 那可以提前将规则定义好
re_comp = re.compile(r"^(\d+?)(0+)$")
print(re_comp.match(num1).groups())
print(re_comp.match(num2).groups())
print(re_comp.match(num3).groups())
print(re_comp.match(num4).groups())
输出:
('1023330001', '000')
('10233330001', '000')
('1033330001', '000')
('1333330001', '000')