正则表达式篇
文章目录
- 1. 导入re模块
- 2. 正则表达式的基本模式
- 3. re模块的主要函数和方法
- 4. 示例
正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。Python内置的re模块提供了完整的正则表达式功能。
以下是一个关于Python中正则表达式的详细教程:
1. 导入re模块
首先,你需要导入Python的re模块来使用正则表达式。
import re
2. 正则表达式的基本模式
- 字符匹配:
- .:匹配任意字符(除了换行符)
- [abc]:匹配方括号中的任意一个字符
- [^abc]:匹配不在方括号中的任意一个字符
- [a-z]:匹配任意小写字母
- [A-Z]:匹配任意大写字母
- [a-zA-Z]:匹配任意字母
- [0-9]:匹配任意数字
- \d:匹配任意数字,等同于[0-9]
- \D:匹配非数字,等同于[^0-9]
- \w:匹配任意字母、数字或下划线,等同于[a-zA-Z0-9_]
- \W:匹配非字母、数字或下划线,等同于[^a-zA-Z0-9_]
- \s:匹配任意空白字符,包括空格、制表符、换页符等
- \S:匹配非空白字符
- 数量词:
- *:匹配前面的子表达式零次或多次
- +:匹配前面的子表达式一次或多次
- ?:匹配前面的子表达式零次或一次
- {n}:匹配前面的子表达式恰好n次
- {n,}:匹配前面的子表达式至少n次
- {n,m}:匹配前面的子表达式至少n次,但不超过m次
- 边界匹配:
- ^:匹配字符串的开始
- $:匹配字符串的结束
- \b:匹配一个单词边界
- \B:匹配非单词边界
- 选择、分组和引用:
- |:或操作,匹配|左右任意一个表达式
- ():捕获括号,对正则表达式进行分组,并捕获匹配的文本
- (?:…):非捕获括号,只进行分组,不捕获匹配的文本
- \n:引用前面第n个捕获括号中匹配的文本(n为正整数)
转义字符: - \:对特殊字符进行转义,使其失去特殊意义
3. re模块的主要函数和方法
- re.match(pattern, string, flags=0):从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。
- re.search(pattern, string, flags=0):扫描整个字符串并返回第一个成功的匹配。
- re.findall(pattern, string, flags=0):在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
- re.finditer(pattern, string, flags=0):和findall类似,但返回的是一个迭代器。
- re.split(pattern, string, maxsplit=0, flags=0):按照能够匹配的子串将字符串分割后返回列表。
- re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找匹配正则表达式的部分,并将其替换为另一个字符串。
- re.compile(pattern, flags=0):将正则表达式编译成一个Pattern对象,可以供match()和search()这两个函数使用。
4. 示例
以下是一些使用Python正则表达式的示例:
- re.match()
import re # 匹配字符串起始位置的模式
pattern = r'Hello'
string = 'Hello, world!'
match = re.match(pattern, string)
if match: print('Found match:', match.group()) # 输出: Found match: Hello
else: print('No match found.')
- re.search()
import re # 在整个字符串中搜索模式
pattern = r'\d+' # 匹配一个或多个数字
string = 'The price is 123 dollars.'
search = re.search(pattern, string)
if search: print('Found match:', search.group()) # 输出: Found match: 123
else: print('No match found.')
- re.findall()
import re # 找到所有匹配模式的子串
pattern = r'\b\w+\b' # 匹配单词边界之间的单词
string = 'Hello world, this is a Python tutorial.'
matches = re.findall(pattern, string) print('Matches:', matches) # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']
- re.finditer()
import re # 找到所有匹配模式的子串,并返回迭代器
pattern = r'\d+'
string = 'The numbers are 123 and 456.'
matches = re.finditer(pattern, string)
for match in matches: print('Found match:', match.group()) # 输出: Found match: 123 和 Found match: 456
- re.split()
import re # 使用模式分割字符串
pattern = r'\s+' # 匹配一个或多个空白字符
string = 'This is a test string.'
split_string = re.split(pattern, string) print('Split string:', split_string) # 输出: Split string: ['This', 'is', 'a', 'test', 'string.']
- re.sub()
import re # 替换字符串中匹配模式的子串
pattern = r'\d+'
repl = 'NUMBER'
string = 'The price is 123 dollars and the code is 456.'
new_string = re.sub(pattern, repl, string) print('New string:', new_string) # 输出: New string: The price is NUMBER dollars and the code is NUMBER.
- re.compile()
import re # 编译正则表达式为Pattern对象,之后可以多次使用
pattern = re.compile(r'\b\w+\b')
string = 'Hello world, this is a Python tutorial.'
matches = pattern.findall(string) print('Matches:', matches) # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']
这些例子涵盖了re模块中常用的函数和方法,并展示了如何使用它们来匹配、搜索、查找所有匹配项、迭代匹配项、分割字符串以及替换字符串中的模式。你可以根据实际需要调整正则表达式和字符串来适应不同的场景。
相关文章:
正则表达式篇
文章目录 1. 导入re模块2. 正则表达式的基本模式3. re模块的主要函数和方法4. 示例 正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种…...
CAST(columnA AS VARCHAR(255)) AS fieldA报错的问题
列类型转换,不能使用VARCHAR,是能使用CHAR 应该改为: CAST(columnA AS CHAR(255)) AS fieldA报错的问题...
github加速神器!解决github巨慢的问题,并且能够加速下载!另外推荐GitKraken -- 超好用的 Git 可视化工具
FastGithub github加速神器,解决github打不开、用户头像无法加载、releases无法上传下载、git-clone、git-pull、git-push失败等问题。 下载地址: 清华云盘 2 部署方式 2.1 windows-x64桌面 双击运行FastGithub.UI.exe 2.2 windows-x64服务 fastgi…...
Stable Diffusion XL之使用Stable Diffusion XL训练自己的AI绘画模型
文章目录 一 SDXL训练基本步骤二 从0到1上手使用Stable Diffusion XL训练自己的AI绘画模型2.1 配置训练环境与训练文件2.2 SDXL训练数据集制作(1) 数据筛选与清洗(2) 使用BLIP自动标注caption(3) 使用Waifu Diffusion 1.4自动标注tag(4) 补充标注特殊tag(5) 训练数据预处理(标注…...
软件杯 深度学习 机器视觉 人脸识别系统 - opencv python
文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习 机器视觉 人脸识别系统 该项目…...
IDEA | 资源文件中文乱码问题解决
问题 IDEA打开资源文件,显示乱码问题。 解决方案 1、电脑是mac,点击IDEA->【Preferences】->【Editor】->【File Encodings】 2、选择【Properties Files】中的UTF-8,并勾选Transparent native-to-ascii conversion。 3、最后点击…...
Linux系统使用Docker部署Portainer结合内网穿透实现远程管理容器和镜像
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...
【Git篇】复习git
文章目录 🍔什么是git⭐git和svn的区别 🍔搭建本地仓库🍔克隆远程仓库🛸git常用命令 🍔什么是git Git是一种分布式版本控制系统,它可以追踪文件的变化、协调多人在同一个项目上的工作、恢复文件的旧版本等…...
[LitCTF 2023]程序和人有一个能跑就行了
新知识 seh 表面上的逻辑蛮简单的 int __cdecl main(int argc, const char **argv, const char **envp) {_DWORD *v3; // eax_DWORD *v5; // eaxchar *v6; // eaxint v7; // [esp0h] [ebp-2ACh] BYREFint v8; // [esp14h] [ebp-298h]int *v9; // [esp18h] [ebp-294h]int v10;…...
如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问
前言 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊如何在群晖NAS搭建bitwarden密码管理软件并实现无公网IP远程访问,希望大家能觉得实用! 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&am…...
perl:获取同花顺数据--业绩快报,业绩公告
perldoc LWP::UserAgent 如果没有安装,则安装模块,运行 cpanm LWP::UserAgent 。 编写 get_yjkb_10jqka.pl 如下 #!/usr/bin/perl # perl 获取同花顺数据--业绩快报 use LWP::UserAgent; use Encode qw(decode encode); use POSIX; use Data::Dump…...
FPGA选型
开发FPGA的第一步,就是选择一片符合设计需求的芯片。 专用资源 选片第一个关注的应该是FPGA器件的专用资源。例如是否需要高速接口,如果需要的话,需要多少个通道,各个通道需要的最高收发速度是多少。同样,如果需要实…...
centos系统的root密码忘记或失效的解决办法(超详细)
文章目录 1、概述2、现象描述3、解决步骤3.1 进入单机维护模式3.2 修改启动参数3.3 在维护模式下修改密码3.4 重启 4、总结 1、概述 在Linux系统中,root用户是最高权限的用户,可以执行任何命令和操作。但是,如果我们忘记了root用户的密码&…...
【Android 源码】Android源码下载指南
文章目录 前言安装Repo初始化Repo选择分支没有梯子替换为清华源 有梯子 下载源码下载开始参考 前言 这是关于Android源码下载的过程记录。 环境:Windows上通过VMware安装的Ubuntu系统 安装Repo 创建Repo文件目录 mkdir ~/bin PATH~/bin:$PATH下载Repo工具&#…...
MySQL数据库高级语句
文章目录 MySQL高级语句older by 排序区间判断查询或与且(or 与and)嵌套查询(多条件)查询不重复记录distinctcount 计数限制结果条目limit别名as常用通配符嵌套查询(子查询)同表不同表嵌套查询还能用于删除…...
软件测试【理论基础】
软件测试的IEEE定义:使用人工或自动的手段来运行或测量软件系统的过程,目的是检验软件系统是否满足规定的需求,并找出与预期结果之间的差异。 软件测试的发展趋势: ① 测试工作将进一步前移。软件测试不仅仅是单元测试、集成测试、系统测试…...
蓝桥杯每日一题(floyd算法)
4074 铁路与公路 如果两个城市之间有铁路t11,公路就会t2>1,没铁路的时候t1>1,公路t21。也就是公路铁路永远都不会相等。我们只需要计算通过公路和铁路从1到n最大的那个即可。 floyd是直接在数组上更新距离。不需要新建dis数组。另外一定要记得把邻接矩阵初始…...
文心一言 VS 讯飞星火 VS chatgpt (224)-- 算法导论16.3 6题
六、假定我们有字母表 C{0,1,…,n-1} 上的一个最优前缀码,我们希望用最少的二进制位传输此编码。说明如何仅用 2n-1n⌈lgn⌉ 位表示 C 上的任意最优前缀码。(提示:通过对树的遍历,用 2n-1 位说明编码树的结…...
flutter3_douyin:基于flutter3+dart3短视频直播实例|Flutter3.x仿抖音
flutter3-dylive 跨平台仿抖音短视频直播app实战项目。 全新原创基于flutter3.19.2dart3.3.0getx等技术开发仿抖音app实战项目。实现了类似抖音整屏丝滑式上下滑动视频、左右滑动切换页面模块,直播间进场/礼物动效,聊天等模块。 运用技术 编辑器&#x…...
VR全景赋能智慧农业,打造沉浸式种植体验平台
随着人口的增长,传统农业也正在面临着不一样的挑战,加上很多人对农业的固有印象,很少有年轻人愿意下到农田里,那么该如何提高产量、降低成本以及引导年轻人深刻感受现代农业成为了急需解决的问题。 随着城市化脚步的推进ÿ…...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
pam_env.so模块配置解析
在PAM(Pluggable Authentication Modules)配置中, /etc/pam.d/su 文件相关配置含义如下: 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块,负责验证用户身份&am…...
linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
