加强档案网站建设做英文小说网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:47
当前位置: 首页 > news >正文
加强档案网站建设,做英文小说网站,网页设计参考书籍,网络工程技术就业前景爬虫Day2 正则表达式 一、正则表达式
正则的作用 正则表达式是一种可以让复杂的字符串变得简单的工具。 写正则表达式就是用正则符号来描述字符串规则
案例1#xff1a;判断一个字符串是否是一个合法的手机号码
tel 23297293329# 方法1#xff1a;不用正则 if len…爬虫Day2 正则表达式 一、正则表达式
正则的作用 正则表达式是一种可以让复杂的字符串变得简单的工具。 写正则表达式就是用正则符号来描述字符串规则
案例1判断一个字符串是否是一个合法的手机号码
tel 23297293329# 方法1不用正则 if len(tel) 11:if tel[0] 1:if tel[1] in 3456789:if tel[2:].isdigit():print(合法)else:print(不合法)else:print(不合法)else:print(不合法) else:print(不合法)print(——————————–华丽的分割线————————————-) import re from re import result re.fullmatch(r1[3-9]\d{9}, tel) if result:print(合法) else:print(不合法)# 案例2提取字符串中所有的数字子串并且求和 str1 睡觉89jss3.45-换手23抗生素8208 result re.findall(r\d.?\d, str1) print(sum([float(x) for x in result]))二、正则语法 from re import fullmatch, findall, search, match, finditer, split, sub1. re模块 - 提供了python中所有和正则相关的函数 fullmatch(正则表达式, 字符串) - 判断整个字符串是否满足正则表达式所描述的规则 findall(正则表达式, 字符串) - 提取字符串中所有满足正则表达式的子串 search(正则表达式, 字符串) - 匹配字符串中第一个满足正则表达式的字串 注意Python中表达式一个正则表达式一般使用r字符串 2.正则符号 第一类符号匹配类符号
1普通符号 - 在正则表达式中表符号本身的符号
result fullmatch(rabc, abc) print(result)# 2. - 匹配任意一个字符 result fullmatch(r.bc, *bc) print(result)result fullmatch(r.bc., 1bcu) print(result)# 3\d - 匹配任意一个数字字符 result fullmatch(r\d\dabc, 08abc) print(result)# 4\s - 匹配任意一个空白字符
空白字符空格( )、换行(\n)、水平制表符(\t)
result fullmatch(r123\sabc, 123\tabc) print(result)result fullmatch(r\d\d\s\d, 89 2) print(result)# 5\w - 匹配任意一个字母、数字、下划线或者中文 result fullmatch(rabc\w123, abc和123) print(result)# 6\D、\S、\W - 分别和\d、\s、\w的功能相反 result fullmatch(rabc\D123, abc8123) print(result) # None# 7[字符集] - 匹配在字符集中的任意一个字符[abc] - 匹配a或者b或者c [abc\d] - 匹配a或者b或者c或者任意数字: [abc0123456789] [1-5] - 匹配字符1到字符5中的任意一个字符 [a-z] - 匹配任意一个小写字母 [A-Z] - 匹配任意一个大写字母 [a-zA-Z] - 匹配任意一个字母 [a-zA-Z\d] - 匹配任意一个字母或者数字 [a-z%] - 匹配任意一个小写字母或者或者% [\u4e00-\u9fa5] - 匹配任意一个中文result fullmatch(rabc[M9你]123, abc你123) print(result)result fullmatch(rabc[M9你\d]123, abc0123) print(result)result fullmatch(rabc[\u4e00-\u9fa5]123, abc和123) print(result)# 8[^字符集] - 匹配不在字符集中的任意一个字符 result fullmatch(rabc[^MN]123, abc)123) print(result)result fullmatch(rabc[^a-z]123, abc$123) print(result)result fullmatch(rabc[M^N]123, abcM123) print(result)第二类符号匹配次数符号
1* - 任意次数0次或者1次或者次数a* - a出现任意多次
\d* - 任意多个任意数字 [abc]* result fullmatch(r1a*2, 1aaaaaaaa2) print(result)result fullmatch(rM\d*N, M13599N) print(result)result fullmatch(rM[3-9]*N, M3489N) print(result)# 2 - 一次或者多次至少1次 result fullmatch(r1a2, 1aaa2) print(result)# 3) ? - 0次或者1次 result fullmatch(r1a?2, 1aa2) print(result) # None# 4{}{N} - N次 {M,N} - M到N次 {M,} - 至少M次 {,N} - 最多N次result fullmatch(r1a{3}2, 1aaa2) print(result)result fullmatch(r1a{3,6}2, 1aaaa2) print(result)# 练习写一个正则表达式可以匹配任意一个除了0的整数。
合法233、234、-7283、100、-2000
不合法0、0002、2.23、-200
result fullmatch(r[-]?[1-9]\d, 2000) print(result)# 5贪婪和非贪婪模式在匹配次数不确定的时候如果有多种次数都可以匹配成功贪婪取最多的那个次数非贪婪取最少的那个次数。(默认是贪婪模式) 贪婪模式、?、、{M,N}、{M,}、{,N} 非贪婪模式?、??、*?、{M,N}?、{M,}?、{,N}?# ahkmb、ahkmb收拾b、ahkmb收拾b收b result search(ra.b, 收拾收拾收ahkmb收拾b收b3]er2) print(result) # re.Match object; span(5, 15), matchahkmb收拾b收bresult search(ra.?b, 收拾收拾收ahkmb收拾b收b3]er2) print(result) # re.Match object; span(5, 10), matchahkmb# ahkmb result search(ra.b, 收拾收拾收ahkmb3]er2) print(result) # re.Match object; span(5, 10), matchahkmbresult search(ra.?b, 收拾收拾收ahkmb3]er2) print(result) # re.Match object; span(5, 10), matchahkmb第三类符号分组和分支
1分组 - ()正则表达式中可以用()将部分内容括起来表示一个整体括号括起来的部分就是一个分组。
a. 整体操作的时候需要分组 b. 重复匹配 - 正则中可以通过\M来重复它前面第M个分组匹配的结果 c. 捕获 - 提取分组匹配到的结果捕获分为自动捕获(findall)和手动捕获# 23M、89K10L、09H23P90Q33W、… result fullmatch(r(\d\d[A-Z]), 09H23P90Q33W) print(result)# 23M23、90K90、78N78、10U10 result fullmatch(r(\d\d)[A-Z]\1, 90K90) print(result)result fullmatch(r(\d{3})([a-z]{2})\2\1{2}, 234kmkm234234) print(result)# findall在正则表达式中有分组的时候会自动提取正则匹配结果中分组匹配到的内容 message 技术上234,jsskf8992技术njk9223-ssjs233结束时间453 result findall(r\u4e00-\u9fa5, message) print(result)# 匹配对象.group(N) - 获取匹配结果中指定分组匹配到的内容
提取身高
message 我是小明今年23岁身高180厘米体重70kg result search(r身高(\d)厘米体重(\d)kg, message) print(result) # re.Match object; span(11, 25), match身高180厘米体重70kg print(result.group()) # 身高180厘米体重70kg print(result.group(1), result.group(2)) # 180 70# 2分支 - |正则1|正则2|正则3|… - 先用正则1进行匹配匹配成功直接成功匹配失败用正则2进行匹配,….result fullmatch(r\d{3}|[a-z]{2}, mn) print(result)# abc34、abcKJ、abc78、abcOP result fullmatch(rabc\d\d|abc[A-Z]{2}, abc23) print(result)result fullmatch(rabc(\d\d|[A-Z]{2}), abcKS) print(result)转义符号 在本身具有特殊功能或者特殊意义的符号前加 \ 让特殊符号变成普通
匹整数部分和小数部分都是两位数的小数
result fullmatch(r\d\d.\d\d, 23.45) print(result)result fullmatch(r\d\d, 34) print(result)# (amd) result fullmatch(r([a-z]{3}), (jsk)) print(result)# 注意单独存在有特殊意义的符号在[]中它的功能会自动消失 result fullmatch(r\d[.?*()]]\d, 3]4) print(result)应用
使用正则表达式提取top250的电影名称
import requests from re import findall headers {user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36 } response requests.get(https://movie.douban.com/top250?start0filter, headersheaders)
print(response.text)
result findall(rimg width100 alt(.?), response.text) print(result)# 使用正则表达式提取top250的电影详情页 import requests from re import findall headers{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,headersheaders)
print(response.text)
result1 findall(ra href(.?) class,response.text)
result2 findall(rhttps://movie.douban.com/subject/\d/,response.text) print(result2)四、re模块 from re import fullmatch, findall, search, split, sub, finditer, match1)fullmatch(正则, 字符串) - 用整个字符串和正则匹配成功返回匹配对象匹配失败返回None 2)findall(正则, 字符串) - 获取字符串中所有满足正则的子串默认返回一个列表列表中的元素是所有匹配到的子串存在自动捕获现象 3)search(正则, 字符串) - 匹配第一个满足正则的子串,匹配成功返回匹配对象匹配失败返回None 4)split(正则, 字符串) - 将字符串中所有满足正则的子串作为切割点进行切割 5)split(正则, 字符串, N) - 将字符串中前N个满足正则的子串作为切割点进行切割 6)sub(正则, 字符串1, 字符串2) - 将字符串2中所有满足正则的子串都替换成字符串1 7)sub(正则, 字符串1, 字符串2, N) 8)finditer(正则, 字符串) - 获取字符串中所有满足正则的子串返回一个迭代器迭代器中的元素是匹配对象 9)match(正则, 字符串) - 匹配字符串开头str1 技术7晋级赛7jsks7就开始看 print(str1.split(7, 2))str1 技术22晋级赛709jsks511就开始80看 print(split(r\d, str1, 2))str1 技术22晋级赛709jsks511就开始80看 print(sub(r\d, , str1))message 妈的SB,都打起来了你还在打野草F u c k print(sub(r(?i)妈的|sb|草|操|艹|f\s*u\s*c\s*k, *, message))str1 技术22晋级赛709jsks511就开始80看 result finditer(r\d, str1) print(list(result))print(fullmatch(r\d{3}, 234)) print(match(r\d{3}, 234卡咖啡))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)
多行匹配(默认). 不能和换行符进行匹配
单行匹配. 可以和换行符进行匹配
print(fullmatch(rabc.123, abc\n123)) # None print(fullmatch(r(?s)abc.123, abc\n123)) # re.Match object; span(0, 7), matchabc\n123msg
name:jshf2- 2ss技术result findall(r(?s)name:(.), msg) print(result)
相关文章
-
加盟做地方门户网站如何做自己的网站商城
加盟做地方门户网站如何做自己的网站商城
- 技术栈
- 2026年03月21日
-
加盟型网站制作怀化物流网站建设报价
加盟型网站制作怀化物流网站建设报价
- 技术栈
- 2026年03月21日
-
加盟型网站制作nas可以做网站
加盟型网站制作nas可以做网站
- 技术栈
- 2026年03月21日
-
加强和改进网站建设建设方案wordpress建站腾讯云
加强和改进网站建设建设方案wordpress建站腾讯云
- 技术栈
- 2026年03月21日
-
加强门户网站建设提升长沙网业公司
加强门户网站建设提升长沙网业公司
- 技术栈
- 2026年03月21日
-
加强门户网站建设与管理如何给网站增加内链
加强门户网站建设与管理如何给网站增加内链
- 技术栈
- 2026年03月21日

