python正则表达式笔记1
最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。
一、 正则表达式语法介绍
正则表达式(或 RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或者正则表达式是否匹配到字符串,这两种说法含义相同)。
正则表达式可以拼接;如果 A 和 B 都是正则表达式,则 AB 也是正则表达式。通常,如果字符串 p 匹配 A,并且另一个字符串 q 匹配 B,那么 pq 可以匹配 AB。
除非 A 或者 B 包含低优先级操作,A 和 B 存在边界条件;或者命名组引用。所以,复杂表达式可以很容易的从这里描述的简单源语表达式构建。
正则表达式可以包含普通或者特殊字符。绝大部分普通字符,比如 'A', 'a', 或者 '0',都是最简单的正则表达式。它们就匹配自身。
你可以拼接普通字符,所以 last 匹配字符串 'last'。通常正则表达式都会用到特殊字符匹配规则。
正则表达式,查找匹配字符串常用于以下几种场景:
1,去除匹配数据。
2,提取匹配数据。
3,替换匹配数据。
4,检测匹配数据。
二、 正则表达式常用方法
Python 基于正则表达式提供了不同的原始操作:
--这3个方法更多用于检测判断
re.match(pattern, string) 只在字符串的开头位置检测匹配。
re.search(pattern, string) 在字符串中的任何位置检测匹配。
re.fullmatch(pattern, string) 检测整个字符串是否匹配。
--这2个方法更多用于查找匹配数据,提取或替换获取目标结果数据。
re.findall(pattern, string) 在字符串中的任何位置检测匹配的字符并返回匹配的字符列表。
re.sub(pattern, repl, string) 在字符串中的任何位置匹配替换的字符并返回结果字符串。
print('============================')
rst1 = re.match("c", "abcdef") # No match
print(rst1)
rst2 = re.search("c", "abcdef") # Match
print(rst2)
# <re.Match object; span=(2, 3), match='c'>
rst3 = re.fullmatch("p.*n", "python") # Match
print(rst3)
# <re.Match object; span=(0, 6), match='python'>
rst4 = re.fullmatch("r.*n", "python") # No match
print(rst4)
rst5 = re.findall(r"\d+", "12pyt34hon56")
print(rst5)
# ['12', '34', '56']
rst6 = re.sub(r"\d+", "", "12pyt34hon56")
print(rst6)
# python
print('============================')
三、 正则表达式常用特殊字符
.
(点) 在默认模式,匹配除了换行的任意字符。如果指定了标签 DOTALL ,它将匹配包括换行符的任意字符。
print('============================')
# 全部替换成统一数据
str_list1 = ['万安县', '万方县', '万在县', '万义县']
for i in range(len(str_list1)):# 匹配替换的字符str_list1[i] = re.sub("万.县", "万安县", str_list1[i])
print(str_list1)
# ['万安县', '万安县', '万安县', '万安县']
print('============================')
^
(插入符号) 匹配字符串的开头, 并且在 MULTILINE 模式也匹配换行后的首个符号。
$
匹配字符串尾或者在字符串尾的换行符的前一个字符,在 MULTILINE 模式下也会匹配换行符之前的文本。
foo 匹配 'foo' 和 'foobar',但正则表达式 foo$ 只匹配 'foo'。
更有趣的是,在 'foo1\nfoo2\n' 中搜索 foo.$,通常匹配 'foo2',
但在 MULTILINE 模式下可以匹配到 'foo1';在 'foo\n' 中搜索 $ 会找到两个(空的)匹配:
一个在换行符之前,一个在字符串的末尾。
*
对它前面的正则式匹配0到任意次重复, 尽量多的匹配字符串。
ab* 会匹配 'a','ab',或者 'a' 后面跟随任意个 'b'。
ab* 会匹配 : 'a','ab','abb','abbb' 等等.
+
对它前面的正则式匹配1到任意次重复, 尽量多的匹配字符串。
ab+ 会匹配 'a' 后面跟随1个以上到任意个 'b',它不会匹配 'a'。
ab+ 会匹配 : 'ab','abb','abbb' 等等.
?
对它前面的正则式匹配0到1次重复。
ab? 会匹配 'a' 或者 'ab'。
\
转义特殊字符(允许你匹配 '*', '?', 或者此类其他),或者表示一个特殊序列.
print('============================')
# 保留数字 和 ¥数字 的金额格式数据,其他数据排除
str_list2 = ['5005', '200.85', '¥12450', '¥100.50', '张三', '2023.08.09']
get_list2 = []
for ss in str_list2:# 查找匹配的字符,下面3个方法等价匹配if re.search(r'(^¥?\d+\.?\d*$)', ss):# if re.search(r'^¥?\d+\.?\d*$', ss):# if re.fullmatch(r'¥?\d+\.?\d*', ss):print('保留')get_list2.append(ss)else:print('去除')continue
print(get_list2)
# ['5005', '200.85', '¥12450', '¥100.50']
print('============================')
{m}
对其之前的正则式指定匹配 m 个重复;少于 m 的话就会导致匹配失败。
比如, a{6} 将匹配6个 'a' , 但是不能是5个。
{m,n}
对正则式进行 m 到 n 次匹配,在 m 和 n 之间取尽量多。
比如,a{3,5} 将匹配 3 到 5个 'a'。忽略 m 意为指定下界为0,忽略 n 指定上界为无限次。
比如,a{4,}b 将匹配 'aaaab' 或者1000个 'a' 尾随一个 'b',但不能匹配 'aaab'。
逗号不能省略,否则无法辨别修饰符应该忽略哪个边界。
print('============================')
# 保留8位带符号格式的日期数据,其他数据排除
str_list3 = ['2023年08月09日', '2023-08-09', '2023/08/09', '20230809', '2023/8/9']
get_list3 = []
for ss in str_list3:# 查找匹配的字符,下面3个方法等价匹配if re.search(r'[\d年月日]{11}', ss) or re.search(r'[\d\-\/]{9,10}', ss):print('保留')get_list3.append(ss)else:print('去除')continue
print(get_list3)
# ['2023年08月09日', '2023-08-09', '2023/08/09']
print('============================')
[]
用于表示一个字符集合。在一个集合中:
1, 字符可以单独列出,比如 [amk] 匹配 'a', 'm', 或者 'k'。
2, 可以表示字符范围,通过用 '-' 将两个字符连起来。
比如 [a-z] 将匹配任何小写ASCII字符,
[0-9] 将匹配从 0到9 的1位数字,
[0-5][0-9] 将匹配从 00 到 59 的两位数字,
[0-9A-Fa-f] 将匹配任何十六进制数位。
如果-进行了转义(比如 [a\-z])或者它的位置在首位或者末尾(如 [-a] 或 [a-]),它就只表示普通字符 '-'。
3, 特殊字符在集合中会失去其特殊意义。比如 [(+*)] 只会匹配这几个字面字符之一 '(', '+', '*', or ')'。
4, 字符类如 \w 或者 \S (如下定义) 在集合内可以接受,它们可以匹配的字符由 ASCII 或者 LOCALE 模式决定。
5, 不在集合范围内的字符可以通过'取反'来进行匹配。
如果集合首字符是 '^' ,所有 不 在集合内的字符将会被匹配,
比如 [^5] 将匹配所有字符,除了 '5',
[^^] 将匹配所有字符,除了 '^'. ^ 如果不在集合首位,就没有特殊含义。
6, 要在集合内匹配一个 ']' 字面值,可以在它前面加上反斜杠,或是将它放到集合的开头。
例如,[()[\]{}] 和 []()[{}] 都可以匹配右方括号,以及左方括号,花括号和圆括号。
|
A|B, A 和 B 可以是任意正则表达式,创建一个正则表达式,匹配 A 或者 B. 任意个正则表达式可以用 '|' 连接。
它也可以在组合(见下列)内使用。扫描目标字符串时, '|' 分隔开的正则样式从左到右进行匹配。
当一个样式完全匹配时,这个分支就被接受。意思就是,一旦 A 匹配成功, B 就不再进行匹配,即便它能产生一个更好的匹配。
或者说,'|' 操作符绝不贪婪。 如果要匹配 '|' 字符,使用 \|, 或者把它包含在字符集里,比如 [|].
(...)
(组合),匹配括号内的任意正则表达式,并标识出组合的开始和结尾。
匹配完成后,组合的内容可以被获取,并可以在之后用 \number 转义序列进行再次匹配,之后进行详细说明。
要匹配字符 '(' 或者 ')', 用 \( 或 \), 或者把它们包含在字符集合里: [(], [)].
print('============================')
# 保留8位带符号格式的日期数据,其他数据排除
str_list3 = ['2023年08月09日', '2023-08-09', '2023/08/09', '20230809', '2023/8/9']
get_list3 = []
for ss in str_list3:# 查找匹配的字符,下面3个方法等价匹配if re.search(r'[\d年月日]{11}|[0-9\-\/]{9,10}', ss):print('保留')get_list3.append(ss)else:print('去除')continue
print(get_list3)
# ['2023年08月09日', '2023-08-09', '2023/08/09']print(re.search(r'(¥\d+)', '¥12450'))
# <re.Match object; span=(0, 6), match='¥12450'>
print('============================')
相关文章:
python正则表达式笔记1
最近工作中经常用到正则表达式处理数据,慢慢发现了正则表达式的强大功能,尤其在数据处理工作中,记录下来分享给大家。 一、 正则表达式语法介绍 正则表达式(或 RE)指定了一组与之匹配的字符串;模块内的函…...
YOLO目标检测——口罩规范佩戴数据集+已标注xml和txt格式标签下载分享
实际项目应用:目标检测口罩佩戴检测数据集的应用场景涵盖了公共场所监控、疫情防控管理、安全管理与控制以及人员统计和分析等领域。这些应用场景可以帮助相关部门和机构更好地管理口罩佩戴情况,提高公共卫生和安全水平,保障人们的健康和安全…...
Android 13 - Media框架(9)- NuPlayer::Decoder
这一节我们将了解 NuPlayer::Decoder,学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容,如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单,越读越发现自己的无知,Android 源码真…...
23.09.5 《CLR via C#》 笔记5
第六章 类型和成员基础 类型可以定义0或多个以下成员:常量、字段、实例构造器、类型构造器、方法、操作符重载、转换操作符、属性、事件、类型类型的可见性分为public和internal(默认)C#中,成员的可访问性分为private、protected、internal、protected …...
laravel部署api项目遇到问题总结
laravel线上部署问题 一、Ubuntu远程Mysql 61“Connection refused”二、Ubuntu更新php8三、线上部署Permission denied3.1、部署完之后访问域名出现报错:3.2、The /bootstrap/cache directory must be present and writable. 四、图片访问404五、git部署线上文件 一…...
lintcode 1646 · 合法组合【字符串DFS, vip 中等 好题】
题目 https://www.lintcode.com/problem/1646 给一个单词s,和一个字符串集合str。这个单词每次去掉一个字母,直到剩下最后一个字母。求验证是否存在一种删除的顺序,这个顺序下所有的单词都在str中。例如单词是’abc’,字符串集合是{‘a’,’…...
【多线程】线程安全 问题
线程安全 问题 一. 线程不安全的典型例子二. 线程安全的概念三. 线程不安全的原因1. 线程调度的抢占式执行2. 修改共享数据3. 原子性4. 内存可见性5. 指令重排序 一. 线程不安全的典型例子 class ThreadDemo {static class Counter {public int count 0;void increase() {cou…...
【用unity实现100个游戏之11】复刻经典消消乐游戏
文章目录 前言开始项目开始一、方块网格生成二、方块交换三、添加交换的动画效果四、水平消除检测五、垂直消除检测六、完善删除功能七、效果优化(移动方块后再进行消除检测)八、方块下落十、方块填充十一、后续 源码参考完结 前言 欢迎来到经典消消乐游…...
若依cloud 修改包名等
一、项目的项目名。 先改pom 然后在重命名文件 1、 修改主pom.xml <artifactId>ruoyi-api</artifactId> 缓存 <artifactId>zxf-api</artifactId> <groupId>com.ruoyi</groupId> <groupId>com.zhixiaofeng</groupId> 2、…...
健康系统练习
健康系统 项目建构: 前后端分离,前端vue3,后端Java,springboot做跨域处理,前端将在vscode中 的tomcat下部署,后端将在ideal中集成的tomcat中部署 创建项目工程在ideal中直接选用springi…创建,…...
网络协议从入门到底层原理学习(一)—— 简介及基本概念
文章目录 网络协议从入门到底层原理学习(一)—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…...
centos密码过期导致navicat无法通过SSH登录阿里云RDS问题
具体错误提示:2013 - Lost connection to server at "hand hake: reading initial communication packet, system error: 0 解决办法:更新SSH服务器密码...
对于pytorch和对应pytorch网站的探索
一、关于网站上面的那个教程: 适合PyTorch小白的官网教程:Learning PyTorch With Examples - 知乎 (zhihu.com) 这个链接也是一样的, 总的来说,里面讲了这么一件事: 如果没有pytorch的分装好的nn.module用来继承的话,需要设计…...
和AI聊天:动态规划
动态规划 动态规划(Dynamic Programming,简称 DP)是一种常用于优化问题的算法。它解决的问题通常具有重叠子问题和最优子结构性质,可以通过将问题分解成相互依赖的子问题来求解整个问题的最优解。 动态规划算法主要分为以下几个步…...
微信小程序——使用插槽slot快捷开发
微信小程序的插槽(slot)是一种组件化的技术,用于在父组件中插入子组件的内容。通过插槽,可以将父组件中的一部分内容替换为子组件的内容,实现更灵活的组件复用和定制。 插槽的使用步骤如下: 在父组件的wx…...
大数据技术之Hadoop:使用命令操作HDFS(四)
目录 一、创建文件夹 二、查看指定目录下的内容 三、上传文件到HDFS指定目录下 四、查看HDFS文件内容 五、下载HDFS文件 六、拷贝HDFS文件 七、HDFS数据移动操作 八、HDFS数据删除操作 九、HDFS的其他命令 十、hdfs web查看目录 十一、HDFS客户端工具 11.1 下载插件…...
静态路由配置实验:构建多路由器网络拓扑实现不同业务网段互通
文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照需求配置静态路由,实现连接 PC 的业务网段互通 摘要: 本实验旨在通过配置网络设备的IP地址和静态路由,实现不同业务网段之间的互通。通过构建一组具有…...
Python函数的概念以及定义方式
一. 前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 二. 什么是函数? 假设你现在是一个工人,如果你实现就准备好了工具,等你接收到任务的时候, 直接带上工…...
【数学建模竞赛】超详细Matlab二维三维图形绘制
二维图像绘制 绘制曲线图 g 是表示绿色 b--o是表示蓝色/虚线/o标记 c*是表示蓝绿色(cyan)/*标记 ‘MakerIndices,1:5:length(y) 每五个点取点(设置标记密度) 特殊符号的输入 序号 需求 函数字符结构 示例 1 上角标 ^{ } title( $ a…...
2023国赛数学建模E题思路代码 黄河水沙监测数据分析
E题最大的难度是数据处理,可以做一个假设,假设一定时间内流量跟含沙量不变,那么我们可以对数据进行向下填充,把所有的数据进行合并之后可以对其进行展开特性分析,在研究调水调沙的实际效果时,可以先通过分析…...
窗口延时、侧输出流数据处理
一 、 AllowedLateness API 延时关闭窗口 AllowedLateness 方法需要基于 WindowedStream 调用。AllowedLateness 需要设置一个延时时间,注意这个时间决定了窗口真正关闭的时间,而且是加上WaterMark的时间,例如 WaterMark的延时时间为2s&…...
发送HTTP请求
HTTP请求是一种客户端向服务器发送请求的协议。它是基于TCP/IP协议的应用层协议,用于在Web浏览器和Web服务器之间传输数据。 HTTP请求由以下几个部分组成: 请求行:包含请求方法、请求的URL和HTTP协议的版本。常见的请求方法有GET、POST、PUT、…...
高等工程数学张韵华版第四章课后题答案
下面答案仅供参考! 章节目录 第4章 欧氏空间和二次型 4.1内积和欧氏空间 4.1.1内积的定义 4.1.2欧氏空间的性质 4.1.3 正交投影 4.1.4 施密特正交化 4.2 正交变换和对称变换 4.2.1 正交变换 4.2.2 正交矩阵 4.2.3 对称变换 4.2.4 对称矩阵 4.3 二…...
wpf C# 用USB虚拟串口最高速下载大文件 每包400万字节 平均0.7s/M,支持批量多设备同时下载。自动识别串口。源码示例可自由定制。
C# 用USB虚拟串口下载大文件 每包400万字节 平均0.7s/M。支持批量多设备同时下载。自动识别串口。可自由定制。 int 32位有符号整数 -2147483648~2147483647 但500万字节时 write时报端口IO异常。可能是驱动限制的。 之前用这个助手发文件,连续发送࿰…...
代码随想录二刷day20
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、力扣654. 最大二叉树二、力扣617. 合并二叉树三、力扣700. 二叉搜索树中的搜索四、力扣98. 验证二叉搜索树 前言 一、力扣654. 最大二叉树 /*** Definitio…...
Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决
本文主要讲述了Yolov5如何训练自定义的数据集,以及使用GPU训练,涵盖报错解决,案例是检测图片中是否有救生圈。 最后的效果图大致如下: 效果图1效果图2 前言 系列文章 1、详细讲述Yolov5从下载、配置及如何使用GPU运行 2、…...
设计模式之单列模式
单列模式是一种经典的设计模式,在校招中最乐意考的设计模式之一~ 设计模式就是软件开发中的棋谱,大佬们针对一些常见的场景,总结出来的代码的编写套路,按照套路来写,不说你写的多好,至少不会太差~ 在校招中…...
linux内核模块编译方法详解
文章目录 前言一、静态加载法1.1 编写驱动程序1.2 将新功能配置在内核中1.3为新功能代码改写Makefile1.4 make menuconfig界面里将新功能对应的那项选择为<*> 二、动态加载法2.1 新功能源码与Linux内核源码在同一目录结构下2.2 新功能源码与Linux内核源码不在同一目录结构…...
简介shell的关联数组与普通数组
本文首先介绍shell的关联数组,然后介绍shell的普通数组,最后总结它们的共同语法。 shell的关联数组 定义一个关联数组,并打印它的key-value对 #!/bin/sh# 声明一个关联数组 declare -A HASH_MAP# 给关联数组赋值 HASH_MAP["Tom"…...
玩转Mysql系列 - 第17篇:存储过程自定义函数详解
这是Mysql系列第17篇。 环境:mysql5.7.25,cmd命令中进行演示。 代码中被[]包含的表示可选,|符号分开的表示可选其一。 需求背景介绍 线上程序有时候出现问题导致数据错误的时候,如果比较紧急,我们可以写一个存储来…...
画册设计流程步骤/关键词优化seo费用
SQL 撤销索引、撤销表以及撤销数据库 通过使用 DROP 语句,可以轻松地删除索引、表和数据库。 DROP INDEX 语句 DROP INDEX 语句用于删除表中的索引。 用于 MS Access 的 DROP INDEX 语法: DROP INDEX index_name ON table_name 用于 MS SQL Server 的 DR…...
叫人做网站要注意/爱站工具网
原文地址:https://www.cnblogs.com/suncj/p/4030975.html 一.删除模板片段使用th:remove属性 th:remove的值如下: 1.all:删除包含标签和所有的孩子。 2.body:不包含标记删除,但删除其所有的孩子。 3.tag:包含标记的删除,但不删除它的孩子。 4.all-but-first:删除所有…...
穿着丝袜做会更爽网站/企业网站怎么注册
在matlab中可以使用newff()和feedforwordnet 创建一个BP神经网络,推荐使用feedforwordnet创建BP神经网络,若想了解其用法,可以使用help命令,查询帮助 mse是一个网络性能函数。它根据平方误差的平均值来衡量网络的性能 (一) x=-4:.5:4; y=x.^2-x; net=newff(minmax(x),…...
如何做网站淘客/不付费免费网站
12月11日,奇瑞控股捷途第二款车型——捷途X70S在山东区域正式上市。新车定位“旅型智能SUV”,共推出手动、自动两种动力组合8款车型,提供冰川白、沙滩金、极光蓝、火山红、琥珀橙、大地棕6种颜色,拥有5、6、52三种座椅布局&#x…...
免费建自己域名的网站/2021年网络热点舆论
Fragile是一款由啤酒之夜工作室精心打造的惊悚逃生题材类游戏,在这款游戏中玩家将会饰演一名小女孩,而玩家的任务就是逃离这个人口贩运秘密组织。并且游戏中还有各种长相恐怖的怪物时刻追击玩家哦,如此惊心动魄的游戏,玩家还在等什…...
dedecms怎么做网站/安徽seo优化规则
2019独角兽企业重金招聘Python工程师标准>>> 数据备份重要性: 数据尤其是一个公司的核心数据关系着公司的命脉,数据丢失可以导致公司倒闭。数据主要分为两大类: 文件类: 程序代码、图片、附件、软件包、配置文件数据&a…...