9.正则和re模块
一、正则表达式
正则表达式:一些有特殊含义的字符组合到一起,形成一套规则,用于匹配字符串的。
用途:1、检测字符串是否合法2、从大文件中找到符合规则的内容放到字符组和非字符组中表示所有
正则表达式常用规则
'.' 默认匹配除\n之外的任意一个字符
'^' 匹配字符开头
'$' 匹配字符结尾
'*' 匹配*号前的字符0次或多次
'+' 匹配前一个字符1次或多次
'?' 匹配前一个字符1次或0次
'{m}' 匹配前一个字符m次
'{n,m}' 匹配前一个字符n到m次
'|' 匹配|左或|右的字符
'(...)' 分组匹配, re.search("(abc){2}a(123|45)", "abcabca456c").group() 结果为'abcabca45'
'\A' 只从字符开头匹配
'\Z' 匹配字符结尾,同$
'\d' 匹配数字0-9
'\D' 匹配非数字
'\w' 匹配[A-Za-z0-9],还包括下划线‘_’
'\W' 匹配非[A-Za-z0-9]
's' 匹配空白字符、\t、\n、\r
简单示例:
# 字符组 []
# [abc] 一个字符组只表示一个字符位置上
# [0-9] 根据ascll码
# [a-z]
# [A-Z]
# [a-zA-Z] 大小写 只有-前后才有大小比较
# [0-9] -->\d 表示匹配一位任意数字 digit
# [0-9a-z_] -->\w 表示数字字母下划线 word
# 空格\tab\enter --> |\t|\n
# -->\s 表示所有空白,包括空格、tab、回车
# 正则表达式中表示匹配的内容的符号都是正则中的元字符
# \W 非数字字母下划线
# \D 非数字
# \S 非空白
# [\d] \d 相同
# [\d\D][\w\W][\s\S] 匹配所有
# . 表示匹配除了换行符之外的任意一个字符
# [^1] 表示非字符组,除了1以外的
# [^\d] 表示匹配所有的非数字
# ^ 表示匹配一个字符串的开始
# $ 表示匹配一个字符串的结尾
#^a.$ 在adacad这个字符串中什么也匹配不上
# ad|bc 匹配ad或bc,优先匹配左边的,不匹配右边,所以长字符在左
# 在www.中可以加\转义.
# www\.(oldboy|baidu|taobao)\.com 匹配该三个网址
#\b 匹配单词的边界
# 记忆元字符
# \d \w \s \t \n
# [] [^]
# ^ $
# | ()
# 一个元字符只能匹配一位
量词
{n} 表示匹配n次
{n,} 表示至少匹配n次
{n, m} 表示至少n次,至多m次
? 表示匹配0或1次 {0,1}
+ 表示一次或多次 {1,}
* 表示0次或多次 {0,}
贪婪匹配和非贪婪
贪婪匹配,在量词范围允许的情况下尽量多的匹配内容
\d{3, 9}
\d{3,}6 187246693634973618728 结果:一直匹配到最后一个6,贪婪匹配回溯算法
非贪婪(惰性匹配)
########## .*?x 表示匹配字符 任意多次数,但是遇到x就停止 爬虫
########## .*x 表示匹配字符 任意多次数,但是遇最后一个x就停止 爬虫
\d{3, }?6 非贪婪,在条件允许的条件下尽量少的匹配,此例中至少匹配3次后在匹配的第一个6后停止
二、re模块
re,math 从头开始匹配
re.search 匹配包含
re.findall 把所有的匹配到的字符放到列表中,以列表中的元素返回
re.split 以匹配到的字符当作列表分隔符
re.sub 匹配字符并替换
re.fullmatch 全部匹配
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗