Python语法进阶笔记(八)
一、正则表达式含义记录文本规则的代码字符串处理工具注意需要导入re模块特点语法比较复杂可读性较差通用性很强适用于多种编程语言步骤导入re模块使用match 方法进行匹配操作re.match() 能匹配出以xxx开头的字符串如果起始位置没有匹配成功返回Nonere.match(pattern, string, flags0)pattern: 匹配的正则表达式string: 要匹配的字符串注意match是匹配字符串开头匹配不到就没有且匹配的是表达式的整体如果男上一步数据匹配成功使用group()提取数据import re # re.match(pattern, string, flags0) # pattern : 匹配的正则表达式 # string : 要匹配的字符串 # flags : 匹配标志 s re.match(星,星月夜星) # 匹配字符串开头 print(s) print(s.group()) # re.Match object; span(0, 1), match星 # 星二、匹配单个字符字符功能.匹配任意1个字符除了\n)[]匹配[]中列举的字符\d匹配数字即0-9\D匹配非数字即不是数字\s匹配空白即空格、tab键\S匹配非空白\w匹配单词字符即a-z、A-Z、0-9、_\W匹配非单词字符import re res2 re.match([he],hello) print(res2.group()) # h res3re.match([1-9],1234) print(res3.group()) # 1 res4re.match([a-zA-Z],Hello) #a-zA-Z代表列举出所有大小写字母 print(res4.group()) # H # \ d 代表数字 res5re.match(\d,91234) print(res5.group()) # 9 # \ D 代表非数字 res6re.match(\D,。a1234) print(res6.group()) # 。 # \ s 代表空白字符/tab键代表两个空格 res7re.match(\s., hello) print(res7.group()) # h # \ S 代表非空白字符 res8re.match(\S,1hello) print(res8.group()) # 1 # \ w 代表字母数字下划线汉字 res9re.match(\w,你好_hello) print(res9.group()) # _ # \ W 代表非字母数字下划线 res10re.match(\W,/hello) print(res10.group()) # /三、匹配多个字符字符功能*匹配前一个字符出现 0 次或者无限次即可有可无匹配前一个字符出现 1 次或者无限次即至少有 1 次匹配前一个字符出现 1 次或者 0 次即要么有 1 次要么没有{m}匹配前一个字符出现 m 次{m,n}匹配前一个字符出现从 m 到 n 次import re # * 匹配前一个字符出现 0 次或者无限次即可有可无 resre.match(\w*,hello world) res1re.match(.*,hello world) print(res.group()) # hello print(res1.group()) # hello world # 匹配前一个字符出现 1 次或者无限次即至少一次 res2re.match(\d,11hello world) print(res2.group()) # 11 # ? 匹配前个字符出现 0 次或者 1 次 res3re.match(\w?,hello world) print(res3.group()) # h # {m} 匹配前一个字符 m 次 res4re.match(\w{2},hello world) print(res4.group()) # he # {m,n} 匹配前一个字符 m 到 n 次,必须符合mn res5re.match(\w{1,9},hello world) print(res5.group()) # hello四、匹配开头结尾字符功能^匹配字符串开头[^x]表示匹配非x的字符,取反$匹配字符串结尾import re # ^ 匹配字符串开头表示对……取反 # 注意 ^在[]中表示不匹配的字符,即[^p]表示匹配非p的字符 res re.match(^py,python) #以py开头 res1 re.match([^p],python) print(res.group()) # py # print(res1.group()) 报错AttributeError: NoneType object has no attribute group # $ 匹配字符串结尾 res2 re.match(.*n$,python) print(res2.group()) # python五、匹配分组字符功能|匹配左右任意一个表达式(ab)将括号中字符作为一个分组\num引用分组 num 匹配到的字符串(?P)分组起别名(?Pname)引用别名为 name 分组匹配到的字符串import re #1. | 匹配左右任意一个表达式 res re.match((python|java),python) res1 re.match((.|/d),123) print(res.group()) print(res1.group()) #2. (abc) 将括号中字符作为一个分组 res2 re.match(\w*(163|qq|126).com,123163.com) print(res2.group()) #3. \num 匹配分组num匹配到的字符串 ----经常在匹配标签时被使用 # res3 re.match((\w*)\w.*/\\1,htmlhello world/html) ---\\转义字符 # res3 re.match(r(\w*)\w.*/\1,htmlhello world/html) # \1表示匹配的分组1r表示取消转义 res3 re.match(r(\w*)(\w*)\w.*/\2/\1,htmlbodyhello world/body/html) print(res3.group()) #注意从外到内排序编号从1开始 #4. (?Pname) 分组起别名 #5. (?Pname) 引用别名为 name 分组匹配到的字符串 res4 re.match(r(?Ptag\w*)(?Ptag2\w*)\w.*/(?Ptag2)/(?Ptag),htmlbodyhello world/body/html) print(res4.group()) # python # 1 # 123163.com # htmlbodyhello world/body/html # htmlbodyhello world/body/html举例import re # 匹配网址 前缀一般是www后缀.com、.cn、.org等 li [www.baidu.com,www.google.com,http.jd.cn,www.python.org] # res re.match(rwww(\.)\w*\1(com|cn|org),www.baidu.com) # print(res.group()) for i in li: res re.match(rwww(\.)\w*\1(com|cn|org),i) if res: # print(i) print(res.group()) else: print(f{i}这个网址格式错误) # www.baidu.com # www.google.com # http.jd.cn这个网址格式错误 # www.python.org六、高级用法--正则函数re.match()从字符串开头匹配只找第一个符合的单个字符re.search()扫描整个字符串并返回第一个成功匹配的对象如果匹配失败则返回None;在整个字符串找第一个符合的单个字符匹配到就停re.findall()以**列表**形式返回整个字符串中所有匹配到的字符串import re res re.search(python,python hello world) print(res.group()) # re.findall(pattern, string, flags0) 搜索字符串返回所有匹配的字符串,返回一个列表 res1 re.findall(python,python hello worldpython) print(res1) # python # [python, python] # 总结 # match()从头开始匹配匹配成功返回match对象通过group()进行提取匹配失败就返回None只匹配一次。 # search()从头到尾匹配匹配成功返回第一个成功匹配的对象通过group()进行提取匹配失败返回None只匹配一次。 # findall()从头到尾匹配匹配成功返回一个列表匹配所有匹配成功的数据不需要通过group()进行提取。re.sub() : 将匹配到的数据进行替换。re.sub(pattern, repl, string, count0, flags0)pattern : 匹配的正则表达式(代表需要被替换的也就是字符串里面的旧内容repl : 替换的字符串新内容string : 要匹配的字符串count : 替换的次数默认为0表示替换所有匹配的import re res re.sub(python,java,python hello worldpython) print(res) res1 re.sub(\d,*,今天是第1天明天是第2天了,1) print(res1) # java hello worldjava # 今天是第*天明天是第2天了split()根据匹配进行切割字符串并返回一个列表。re.split(pattern, string, maxsplit0, flags0)pattern : 正则表达式 分割的符串string : 要匹配的字符串maxsplit : 指定最大分割次数分割的次数默认为0表示分割所有匹配的import re res re.split(|,python hello world) # | 匹配左右任意一个表达式 res1 re.split(o,python hello world) res2 re.split(o, python hello world,1) print(res) print(res1) print(res2) # [, p, y, t, h, o, n, , h, e, l, l, o, , w, o, r, l, d, ] # [pyth, n hell, w, rld] # [pyth, n hello world]七、贪婪与非贪婪贪婪匹配在满足匹配条件时会匹配尽可能长的字符串。在正则表达式中这是默认的匹配模式。非贪婪匹配在满足匹配条件时会匹配尽可能短的字符串。在正则表达式中通过在量词如*,,?,{n,}后添加一个?来表示非贪婪匹配import re # 贪婪匹配尽可能多的匹配默认贪婪匹配 res re.match(em*,emmmmmmm……) print(res.group()) # 非贪婪匹配尽可能少的匹配 res1 re.match(em*?,emmmmmmm……) print(res1.group()) res2re.match(m{1,5},mmmmmmm……) print(res2.group()) res3re.match(m{1,5}?,mmmmmmm……) print(res3.group()) # emmmmmmm # e # mmmmm # m八、原生字符串Python中字符串前面加上 r 表示原生字符串import re print(rfives\tar) # 取消转义 res re.match(\\\\,\game) # 正则表达式中匹配字符串中的字符\,需要\\\\ res1 re.match(r\\\\,r\\game)# 加入原生字符串r\\代表\ print(res.group()) print(res1.group())

相关新闻

基于proteus的LM331的频率电压变换电路

基于proteus的LM331的频率电压变换电路

设计一个频率/电压变换电路&#xff0c;输入信号为正弦波&#xff0c;输出信号是直流电压。当输入信号的频率变化时&#xff0c;输出的直流电压随输入信号的频率发生线性变化。 1 输入信频率事范围:200~2KHZ。 2 输出信号电压范围:1~5V 3.转换精度:<1% 4:电源电压:12V范围内…

2026/7/5 22:57:49 阅读更多 →
【device_create_file 创建sysfs 属性文件一些笔记】

【device_create_file 创建sysfs 属性文件一些笔记】

文章目录代码引入1. 定义属性结构体2. 在 probe 中创建属性文件3. 在 remove 中清理属性添加sysfs套路解读1、属性定义2、注册属性3、文件操作绑定4、回调到具体函数_show / _store函数宏展开原理为什么不直接使用函数名&#xff1f;在 Linux 内核中&#xff0c;通过 device_cr…

2026/7/5 23:43:04 阅读更多 →
AIGC开源推荐-企业内部agent框架-Goose

AIGC开源推荐-企业内部agent框架-Goose

一、执行摘要 Goose 是由 Block 发布的开源、可扩展的「工程/企业向 AI agent 平台」&#xff0c;侧重把企业既有工具&#xff08;通过 MCP 扩展&#xff09;与本地执行能力结合&#xff0c;解决工具碎片化、隐私合规、多 agent 编排与工程效率提升等问题。该报告整合了源码架…

2026/7/3 12:17:17 阅读更多 →

最新新闻

告别网络限制:VBrowser-Android 全网视频缓存终极解决方案

告别网络限制:VBrowser-Android 全网视频缓存终极解决方案

告别网络限制&#xff1a;VBrowser-Android 全网视频缓存终极解决方案 【免费下载链接】VBrowser-Android 全网视频嗅探缓存APP 项目地址: https://gitcode.com/gh_mirrors/vb/VBrowser-Android 在移动互联网时代&#xff0c;网络不稳定和流量限制常常成为视频观看的痛点…

2026/7/7 7:50:04 阅读更多 →
博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

博物馆文物低蓝光照明改造为什么首选KNX?系统方案、优势与行业避坑指南

一、引言&#xff1a;文物照明改造&#xff0c;不止“调亮调暗”这么简单博物馆日常运维里&#xff0c;光照对展品的损害是持续累积的&#xff0c;尤其书画、古籍、丝织品、壁画这类光敏材质&#xff0c;照度不准、光谱不对&#xff0c;时间一长就是褪色、脆化、剥落&#xff0…

2026/7/7 7:46:03 阅读更多 →
3分钟上手Real-ESRGAN-ncnn-vulkan:打造高性能图像超分辨率神器

3分钟上手Real-ESRGAN-ncnn-vulkan:打造高性能图像超分辨率神器

3分钟上手Real-ESRGAN-ncnn-vulkan&#xff1a;打造高性能图像超分辨率神器 【免费下载链接】Real-ESRGAN-ncnn-vulkan NCNN implementation of Real-ESRGAN. Real-ESRGAN aims at developing Practical Algorithms for General Image Restoration. 项目地址: https://gitcod…

2026/7/7 7:46:03 阅读更多 →
Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy:重新定义游戏公平竞技的AI瞄准辅助,让每位玩家都能享受射击游戏的乐趣

Aimmy&#xff1a;重新定义游戏公平竞技的AI瞄准辅助&#xff0c;让每位玩家都能享受射击游戏的乐趣 【免费下载链接】Aimmy Universal Second Eye for Gamers with Impairments (Universal AI Aim Aligner (AI Aimbot) - ONNX/YOLOv8 - C#) 项目地址: https://gitcode.com/g…

2026/7/7 7:44:03 阅读更多 →
专业的EMBA综合实力TOP5榜单深度评测

专业的EMBA综合实力TOP5榜单深度评测

一、评测引言随着国内企业全球化布局加速、数字化转型深入&#xff0c;兼具国际化视野与本土落地能力的中英双语EMBA项目&#xff0c;成为企业创始人、高层管理者突破管理瓶颈、搭建全球资源网络的核心选择。当前市场EMBA项目品类繁杂&#xff0c;内地高校、港澳院校项目各有优…

2026/7/7 7:40:02 阅读更多 →
多机器人路径规划为何要抛弃Sum of Costs?执行时间可预测性才是工业核心

多机器人路径规划为何要抛弃Sum of Costs?执行时间可预测性才是工业核心

1. 为什么Sum of Costs在多机器人调度中越来越“不准”了&#xff1f;我第一次在物流分拣中心看到那套号称“最优”的多机器人路径规划系统时&#xff0c;心里就打了个问号。系统输出的Sum of Costs&#xff08;所有机器人路径长度之和&#xff09;是237.8秒&#xff0c;现场工…

2026/7/7 7:40:02 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集&#xff0c;从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高&#xff1a;流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广&#xff0c;是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队&#xff0c;往往容易卡在一容易踩坑的选型难题&#xff1a; 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定&#xff0c;必须同时依赖「文本语义理解 实体关系推理」时&#xff0c;到底是做「向量图谱混合检索」就够了&#xff0c;还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools&#xff1a;5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱&#xff0c;支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里&#xff0c;参与了关于混合后量子密码学的讨论&#xff0c;应付端点攻击找茬的人&#xff0c;还参与留言板讨论后&#xff0c;发现“威胁模型”对多数人仍是陌生概念&#xff0c;且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”&#xff1a;我理解的渗透测试到底是什么&#xff1f;每次看到新闻里说某个大公司的数据被“黑”了&#xff0c;或者某个网站被攻击导致服务瘫痪&#xff0c;你是不是和我一样&#xff0c;心里会冒出两个念头&#xff1a;一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻