淄博网站建设-中国互联,局域网的常用技术是什么,长春做网站4435,网站排名做不上去正则表达式
1.正则的作用
正则表达式式一种可以让复杂的字符串变得简单的工具。
写正则表达式的时候就是用正则符号来描述字符串规则。
2.正则语法
需要导入模块
from re import fullmatch, findall, search2.1.第一类#xff1a;匹配类符号
1#xff09;普通字符—在…正则表达式
1.正则的作用
正则表达式式一种可以让复杂的字符串变得简单的工具。
写正则表达式的时候就是用正则符号来描述字符串规则。
2.正则语法
需要导入模块
from re import fullmatch, findall, search2.1.第一类匹配类符号
1普通字符—在正则表达式中表式符号本身的符号
result fullmatch(rabc, abc)
print(result) # re.Match object; span(0, 3), matchabc2.点 —匹配任意一个字符
result fullmatch(r.bc, wbc) # 第一位任意字符都可以第二位和第三位必须是bc否则为空
print(result) # re.Match object; span(0, 3), matchwbc
result fullmatch(r.bc, wcc)
print(result) # None3\d — 匹配任意一个数字字符
result fullmatch(r\d\dabc, 88abc) # abc前面任意两个数字都可以
print(result) # re.Match object; span(0, 5), match88abc4\s —— 匹配任意一个空白字符
空白字符空格(‘’)、换行(‘\n’)、水平制表符(‘\t’)
result fullmatch(r123\sabc, 123 abc)
result1 fullmatch(r123\sabc, 123\tabc)5\w — 匹配任意一个字母、数字、下划线或者中文
result11 fullmatch(rabc\w123, abcT123)
result12 fullmatch(rabc\w123, abc8123)
result2 fullmatch(rabc\w123, abc_123)
result3 fullmatch(rabc\w123, abc我123)6\D、\S、\W —— 分布和\d、\s、\w的功能相反
\D —— 除了数字的任意字符
result4 fullmatch(rabc\D123, abcw123)
result5 fullmatch(rabc\D123, abc8123) # None\S —— 除了空白字符的任意字符
result41 fullmatch(rabc\S123, abc1123)
result51 fullmatch(rabc\SD123, abc 123) # None\W —— 除了字母数字下划线和中文的任意字符
result42 fullmatch(rabc\W123, abc*123)
result52 fullmatch(rabc\W123, abc_123) # None注意如果字符中间是tab键不可以因为只能匹配任意一个字符tab是四个。
7[字符集] —— 匹配在字符集中的任意一个字符
[abc] —— 匹配a或者b或者c
[abc\d] —— 匹配a或者b或者c或者任意数字[abc0123456789]
[0-9] —— 匹配字符0到9中任意一个字符
[a-z] —— 匹配任意一个小写字母
[A-Z] —— 匹配任意一个大写字母
[a-z%] —— 匹配任意一个小写字母或者%
[a-zA-Z] —— 匹配任意一个字母
[a-zA-Z\d] —— 匹配任意一个字母或者数字
[\u4e00-\u9fa5] —— 匹配任意一个中文result6 fullmatch(rabc[你好hello]123, abc你123)
print(result6) # re.Match object; span(0, 7), matchabc你123result33 fullmatch(rabc[\u4e00-\u9fa5]123, abc婷123)
print(result33)8)[^字符串] —— 匹配不在字符集中的任意一个字符
result71 fullmatch(rabc[^MN]123, abca123) # 除了MN的字符其它都可以
result72 fullmatch(rabc[^MN]123, abcM123) # None2.2 第二类符号匹配次数符号
匹配类符号 匹配次数
1) * —— 任意次数0次或者1次或者多次
a* —— a出现任意多次
\d* —— 任意多个任意数字
[abc]* —— abc中任意一个字符可以出现任意多次result81 fullmatch(r1a*2, 1aaaaaaa2)
result82 fullmatch(rM\d*N, M1234567890N)
result83 fullmatch(rM[3-9]*N, M1234567890N)2 —— 一次或者多次至少1次
result86 fullmatch(r1a2, 1aaa2)3 —— 0次或者1次
result84 fullmatch(r1a?2, 1aa2) # none
result85 fullmatch(r1a?2, 1a2)4) {}
{N} —— N次
{M,N} —— M到N次
{M,} —— 至少M次
{,N} —— 最多N次result8 fullmatch(r1a{3}2, 1aaa2) # a出现3次
result87 fullmatch(r1a{3,6}2, 1aaaa2) # a出现3到6次都可以# 练习写一个正则表达式可以匹配任意一个除了0的整数。
# 合法233、234、-7283、100、-2000
# 不合法0、0002、2.23
result9 fullmatch(r[-]?[1-9]\d*, 0.123)
print(result9)5贪婪和非贪婪模式
1.在匹配次数不确定的时候如果有多种次数都可以匹配成功贪婪取最多的那个次数非贪婪取最少的那个次数。 2.默认是贪婪模式· 3.贪婪模式、、*、{MN}、{M}、{N} 非贪婪模式、、*、{MN}、{M}?、{N}?
result10 search(ra.{3,5}b, a123b) # 匹配字符串中第一个满足正则表达式,就是取三个
print(result10)# ahhhhb,ahhhhbyyb,ahhhhbyybuuub
result121 search(ra.b, dhwahhhhbyybuuubvxgdfs)
print(result121) # ahhhhbyybuuub
# 非贪婪,就是在正常的写法后面加一个
result122 search(ra.?b, dhwahhhhbyybuuubvxgdfs)
print(result122) # ahhhhb# 练习使用正则提取top250中每个电影的详情页地址
import requests
from re import findallheaders {user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/111.0.0.0 Safari/537.36
}
response requests.get(https://movie.douban.com/top250?start0filter, headersheaders)
result findall(ra href(https://movie.douban.com/subject/.*?/) , response.text)
print(result)
#方法2
response requests.get(https://movie.douban.com/top250?start0filter, headersheaders)
result list(set(findall(rhttps://movie.douban.com/subject/.*?/ , response.text)))
print(result)3.分组和分支
1)分组 —— ()
正则表达式中可以用()将部分内容括起来表示一个整体括号括起来的部分就是一个分组
a.整体操作的时候需要分组
b.重复匹配 —— 正则中可以通过\M来重复它前面第M个分组匹配的结果
c.捕获 —— 提取分组匹配到的结果(捕获分为自动捕获(findall)和手动捕获)1.整体操作
# 整体操作
# 23M
result23 fullmatch(r(\d\d[A-Z]), 45T45H65F56G90D)
print(result23)2.重复匹配
# 重复匹配\1是指的是重复前面第一个括号
#案例 90k90 , 80u80,99u99
result32 fullmatch(r(\d\d)[A-Z]\1, 90K90)
print(result32) # re.Match object; span(0, 5), match90K90
# \2是指的是重复第2个括号
result3211 fullmatch(r(\d{3})([A-Z]{2})\2\1, 999LOLO999)
print(result3211) # re.Match object; span(0, 11), match999LOLO999
#案例2 提取中文后的数字
# findall在正则表达式中有分组的时候会自动提取正则匹配结果中分组匹配到的内容
message hfuuf你好335556432jfigh89和2470
result99 findall(r[\u4e00-\u9fa5](\d), message)
print(result99) # [335556432, 2470]
#案例3提取身高的数据
message 我是小明今年18岁,身高180cm,体重70kg
result search(r身高(\d)cm,体重(\d)kg, message)
2)匹配对象.group(N) —— 获取匹配结果中指定的分组匹配到的内容
print(result) # re.Match object; span(11, 25), match身高180cm,体重70kg
print(result.group()) # 身高180cm,体重70kg
print(result.group(1), result.group(2)) # 180 703) 分支 —— |
正则1|正则2|正则3|.... —— 先用正则1进行匹配匹配成功直接成功匹配失败用正则2进行匹配...result fullmatch(\d{3}|[a-z]{2}, mn)
print(result) # re.Match object; span(0, 2), matchmnresult fullmatch(rabc\d\d|abc[A-Z]{2}, abc23)
print(result) # re.Match object; span(0, 5), matchabc23result fullmatch(rabc(\d\d|[A-Z]{2}), abcLL)
print(result) # re.Match object; span(0, 5), matchabcLL4.转义符号
转义符号在本身具有特殊功能或者特殊意义的符号前加,让特殊符号变成普通意思。
# 案例匹配整数部分和小数部分都是两位数的小数
result fullmatch(r[1-9]\d\.\d\d, 23.45)
print(result) #re.Match object; span(0, 5), match23.45# 案例需要求两个数的和
result fullmatch(r\d\\d,34)
print(result) #re.Match object; span(0, 3), match34# 案例打印’amd‘
result fullmatch(r\([a-z]{3}\),(jsk))
print(result) #re.Match object; span(0, 5), match(jsk)# 注意单独存在有特殊意义的符号在[]中它的功能会自动消失
# 适用于 . ? * $
result fullmatch(r\d[]\d,34)
print(result) #re.Match object; span(0, 3), match345.re模板
re模块 —— 提供了python中所有和正则相关的函数。
fullmatch(正则表达式,字符串) —— 用整个字符串判断是否满足正则表达式所描述的规则匹配成功返回匹配对象匹配失败Nonefindall(正则表达式,字符串) —— 获取字符串所有满足正则表达式的子串默认返回一个列表列表中匹配的元素是所有子串存在自动捕获search(正则表达式,字符串) —— 匹配字符串中第一个满足正则表达式的子串,匹配成功返回匹配对象匹配失败返回空split(正则表达式,字符串) —— 将字符串中 所有满足正则的子串作为切割点进行切割split(正则表达式,字符串,N) —— 将字符串中前N个满足正则的子串作为切割点进行切割sub(正则表达式,字符串1,字符串2) —— 将字符串2中所有满足正则的子串都替换成字符串1sub(正则表达式,字符串1,字符串2,N)finditer(正则表达式,字符串) —— 获取字符串中所有满足正则的子串返回一个迭代器迭代器中的元素是匹配对象match(正则表达式,字符串) —— 匹配字符串开头
str1 技术7d3eee5eee7ef7njk9你减肥胶囊7
print(str1.split(7)) # [技术, d3eee5eee, ef, njk9你减肥胶囊, ]str1 技术7d3eee5eee7ef7njk9你减肥胶囊7
print(split(r\d, str1, 2)) # [技术, d, eee5eee7ef7njk9你减肥胶囊7]str1 技术7d3eee5eee7ef7njk9你减肥胶囊7
print(sub(r\d, , str1)) #技术deeeeeeefnjk你减肥胶囊message 妈的sb,西八都打起来了你还在打野操fuck
print(sub(r(?i)妈的|sb|西八|操|f\s*u\s*c\s*k|艹,*,message)) #**,*都打起来了你还在打野**str1 技术7d3eee5eee7ef7njk9你减肥胶囊7
result finditer(r\d, str1)
print(list(result)) #re.Match object; span(15, 16), match7, re.Match object; span(19, 20), match9, re.Match object; span(25, 26), match7]print(fullmatch(r\d{3}, 234))
print(match(r\d{3}, 234Ihs你好))6.参数
1)忽略大小写:(?i)
print(fullmatch(r(?i)abc, abc))
print(fullmatch(r(?i)abc, Abc))
print(fullmatch(r(?i)abc, ABc))
print(fullmatch(r(?i)abc, AbC))2)单行匹配:(?s)
多行匹配(默认).(点) 不能和换行符(\n)进行匹配
单行匹配:.(点)可以和换行符进行匹配
print(fullmatch(rabc.123,abc0123)) # None
# print(fullmatch(rabc.123,abc\n123))
print(fullmatch(r(?s)abc.123,abc\n123)) # re.Match object; span(0, 7), matchabc\n123举例 # 输入多行
name:student
——小张message name:student
wqe小张result findall(r(?s)name:(.),message)
print(result) #[student\nwqe小张]