企业在公司做的网站遇到的问题,班级网站建设的系统概述,wordpress支付按钮,登录wordpress显示403目录 一、打开正则表达式 二、正则表达式的使用
1、限定符
#xff08;1#xff09;x*#xff1a;*表示它前面的字符y 可以有0个或多个#xff1b; #xff08;2#xff09;x#xff1a;表示它前面的字符可以出现一次以上#xff1b;#xff08;只可以匹配多次…目录 一、打开正则表达式 二、正则表达式的使用
1、限定符
1x**表示它前面的字符y 可以有0个或多个 2x表示它前面的字符可以出现一次以上只可以匹配多次
3x{}精确指定一个字符x出现了多少次
4x{2,5}指定字符出现次数的范围x{2,} 字符x出现2次以上
5x?字符x出现0次或1次
2、运算符
1(x|y)匹配字符x或y。(xy)|(ab)匹配 xy 或ab
3、字符类
4、元字符
5、贪婪匹配和懒惰匹配
三、正则表达式实际应用-Python实现
1、re.finadll 用法
2、re.search 用法
3、.group 用法
4、re.finditer 用法
5、re.match 和 re.fullmatch 用法
6、re.sub 和 re.subn 用法
7、re.split 用法
8、re.compile 用法
9、正则表达式实际运用
1匹配手机号
2将字符串转成字典格式 一、打开正则表达式
1、快捷键 CtrlR将替换功能调出来且图中红框的位置一定要点亮才可以使用正则表达式 二、正则表达式的使用
1、限定符
1x**表示它前面的字符y 可以有0个或多个 2x表示它前面的字符可以出现一次以上只可以匹配多次 3x{}精确指定一个字符x出现了多少次 4x{2,5}指定字符出现次数的范围x{2,} 字符x出现2次以上 5x?字符x出现0次或1次 2、运算符
1(x|y)匹配字符x或y。(xy)|(ab)匹配 xy 或ab 3、字符类
[abc]表示匹配的字符只能取自abc
[a-z]表示所有的小写字母
[a-zA-Z]表示所有的英文字母
[a-zA-Z0-9]表示所有的英文字母和数字
[^a-zA-Z0-9]表示匹配除了尖号后面列出的所有字符之外的符号 4、元字符
正则里面的元字符基本上是以反斜杠开头的 5、贪婪匹配和懒惰匹配
.贪婪匹配任意字符不包括换行符
.懒惰匹配任意字符
三、正则表达式实际应用-Python实现
注需要用到 re 模块
1、re.finadll 用法
re.findall(., abc\ndef\nghi\n) # 第一个参数是正则表达式第二个参数是需要匹配的字符串
运行结果[abc, def, ghi]
print(re.findall(., abc\ndef\nghi\n,flagsre.DOTALL)) # flagsre.DOTALL表示匹配所有的字符
运行结果[abc\ndef\nghi\n]查阅官方资料
1浏览器搜索 Python re flags 2找到官网并点击 2、re.search 用法
# 用法与findall一样唯一不同的是返回值它只会匹配符合规则的第一个值且返回的是一个Match对象。如果匹配不到则返回NOne
print(re.search(\d{3,4}, Tel-028-7654321))
print(re.search([a-z]{4,5}, Tel-028-7654321))运行结果 re.Match object; span(4, 7), match028 None 3、.group 用法
res re.search((\d{3,4})-(\d{7,8}), Tel-028-7654321)print(res.group())
print(res.group(1))
print(res.group(2)) 运行结果 028-7654321 028 7654321 4、re.finditer 用法
功能匹配所有符合规则的内容并处理成迭代器返回
res re.finditer((\d{3,4})-(\d{7,8}), Tel-028-7654321 Tel-059-0123467)
print(res)
for m in res:print(m.group())# print(m.group(1))# print(m.group(2)) 运行结果 callable_iterator object at 0x0000021E7D812E60 1group无参数 028-7654321 059-0123467 2group参数为1 028 059 3group参数为2 7654321 0123467 补充
# 迭代器不依赖于索引的迭代取值方式
迭代就是重复每一次的重复都是在上一次的基础上 详细请读python-迭代器 5、re.match 和 re.fullmatch 用法
re.match与re.seach用法一样也是只匹配符合规则的第一个值并返回Match对象。
但它只能匹配字符串的开头若匹配不到返回None
re.fullmatch 从头匹配到尾也就是进行匹配整个字符串若成功返回Match对象否则返回None
6、re.sub 和 re.subn 用法
re.sub功能将匹配到的内容替换成其他内容可以穿字符串函数地址
1传字符串
res re.finditer((\d{3,4})-(\d{7,8}), Tel-028-7654321 Tel-059-0123467)
for m in res:print(m.group())
print(re.sub((\d{3,4})-(\d{7,8}), ***, Tel-028-7654321 Tel-059-0123467))y 运行结果 028-7654321 059-0123467 Tel-*** Tel-*** 2传内存地址 - sub功能每匹配到一个值就会得到一个Match对象然后调用我们传的函数并把Match对象传给他。
脱敏后的电话号码---运于外卖上
def des(m): # 这里是为了sub调用函数传对象给函数这里m接收Match对象print(fgroup(1):,m.group(1))tel m.group(2)print(fgroup(2):,tel)return tel[:2] *** tel[-2:] # tel[:2]得到tel的前两位,tel[-2:]得到后两位print(re.sub((\d{3,4})-(\d{7,8}), des, Tel-028-7654321 Tel-059-0123467))运行结果 group(1): 028 group(2): 7654321 group(1): 059 group(2): 0123467 Tel-76***21 Tel-01***67 re.subn功能与re.sub一样多返回了一个替换的次数
上面的例子
def des(m):tel m.group(2)return tel[:2] *** tel[-2:]print(re.subn((\d{3,4})-(\d{7,8}), des, Tel-028-7654321 Tel-059-0123467)) 运行结果; (Tel-76***21 Tel-01***67, 2) 7、re.split 用法
作用把正则匹配到的内容作为分隔符进行拆分
s xyg,- time, !dog, cat
# 传统的拆分
print(f传统拆分, s.split(,))print(re.split(\w, s)) # \w 匹配单词字符包括字母、数字和下划线
print(re.split(\W, s)) # \W 匹配非单词字符
print(re.split(\W, s)) # \W 加上 表示只匹配的字符只能取自W 运行结果 传统拆分 [xyg, - time, !dog, cat] [, , , ,- , , , , , !, , , , , , , ] [xyg, , , time, , , , dog, , , cat] [xyg, time, dog, cat] 8、re.compile 用法
功能传给它一个正则表达式它会返回一个正则表达式对象主要用于一个正则表达式被多次使用时。
res re.compile(.*)
print(res.findall(Tel-028-7654321 Tel-059-0123467)) 运行结果 [Tel-028-7654321 Tel-059-0123467, ] 9、正则表达式实际运用
1匹配手机号
phone_num
125163251489
15812569487
15536854456
15587452256
15520361197
ab153023697
141111111111
12348567954
136489651035
13845620147
163258953255551print(re.findall(r\b(13[0-9]|14[5-9]|15[0-35-9])\d{8}\b, phone_num))
print(re.findall(r\b(?:13[0-9]|14[5-9]|15[0-35-9])\d{8}\b, phone_num))# 加r:防止转义# \b 标注字符的边界
# \d 匹配数字字符
# x{y} x字符出现y次
# x{a,b} 指定字符出现次数的范围
# 在编程语言中使用正则如果正则表达式中出现小括号那编程语言会把小括号视作匹配边界也就是说会把小括号里面的内容视为一个group# 解决方法:在小括号内的最前面加上这样可以申明这个小括号不是一个group 运行结果 [158, 155, 155, 155, 138] [15812569487, 15536854456, 15587452256, 15520361197, 13845620147] 2将字符串转成字典格式
思想
第一组:group1 第二组group2 s
Host: movie.douban.com
Pragma: no-cache
Referer: https://cn.bing.com/dic {}
res re.finditer((.*): (.*), s)
# .**表示它前面字符.可以有0个或多个
# : 冒号后面加空格会因为字符串s中冒号后面有空格for m in res: # res写了两个小括号就是两组小括号# print(m.group(1))# print(m.group(2))dic[m.group(1)] m.group(2) # 填充到字典中print(dic) 运行结果 {Host: movie.douban.com, Pragma: no-cache, Referer: https://cn.bing.com/}