当前位置: 首页 > news >正文

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

最近工作中经常用到正则表达式处理数据&#xff0c;慢慢发现了正则表达式的强大功能&#xff0c;尤其在数据处理工作中&#xff0c;记录下来分享给大家。 一、 正则表达式语法介绍 正则表达式&#xff08;或 RE&#xff09;指定了一组与之匹配的字符串&#xff1b;模块内的函…...

YOLO目标检测——口罩规范佩戴数据集+已标注xml和txt格式标签下载分享

实际项目应用&#xff1a;目标检测口罩佩戴检测数据集的应用场景涵盖了公共场所监控、疫情防控管理、安全管理与控制以及人员统计和分析等领域。这些应用场景可以帮助相关部门和机构更好地管理口罩佩戴情况&#xff0c;提高公共卫生和安全水平&#xff0c;保障人们的健康和安全…...

Android 13 - Media框架(9)- NuPlayer::Decoder

这一节我们将了解 NuPlayer::Decoder&#xff0c;学习如何将 MediaCodec wrap 成一个强大的 Decoder。这一节会提前讲到 MediaCodec 相关的内容&#xff0c;如果看不大懂可以先跳过此篇。原先觉得 Decoder 部分简单&#xff0c;越读越发现自己的无知&#xff0c;Android 源码真…...

23.09.5 《CLR via C#》 笔记5

第六章 类型和成员基础 类型可以定义0或多个以下成员&#xff1a;常量、字段、实例构造器、类型构造器、方法、操作符重载、转换操作符、属性、事件、类型类型的可见性分为public和internal(默认)C#中&#xff0c;成员的可访问性分为private、protected、internal、protected …...

laravel部署api项目遇到问题总结

laravel线上部署问题 一、Ubuntu远程Mysql 61“Connection refused”二、Ubuntu更新php8三、线上部署Permission denied3.1、部署完之后访问域名出现报错&#xff1a;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。这个单词每次去掉一个字母&#xff0c;直到剩下最后一个字母。求验证是否存在一种删除的顺序&#xff0c;这个顺序下所有的单词都在str中。例如单词是’abc’&#xff0c;字符串集合是{‘a’,’…...

【多线程】线程安全 问题

线程安全 问题 一. 线程不安全的典型例子二. 线程安全的概念三. 线程不安全的原因1. 线程调度的抢占式执行2. 修改共享数据3. 原子性4. 内存可见性5. 指令重排序 一. 线程不安全的典型例子 class ThreadDemo {static class Counter {public int count 0;void increase() {cou…...

【用unity实现100个游戏之11】复刻经典消消乐游戏

文章目录 前言开始项目开始一、方块网格生成二、方块交换三、添加交换的动画效果四、水平消除检测五、垂直消除检测六、完善删除功能七、效果优化&#xff08;移动方块后再进行消除检测&#xff09;八、方块下落十、方块填充十一、后续 源码参考完结 前言 欢迎来到经典消消乐游…...

若依cloud 修改包名等

一、项目的项目名。 先改pom 然后在重命名文件 1、 修改主pom.xml <artifactId>ruoyi-api</artifactId> 缓存 <artifactId>zxf-api</artifactId> <groupId>com.ruoyi</groupId> <groupId>com.zhixiaofeng</groupId> 2、…...

健康系统练习

健康系统 项目建构&#xff1a; 前后端分离&#xff0c;前端vue3&#xff0c;后端Java&#xff0c;springboot做跨域处理&#xff0c;前端将在vscode中 的tomcat下部署&#xff0c;后端将在ideal中集成的tomcat中部署 创建项目工程在ideal中直接选用springi…创建&#xff0c…...

网络协议从入门到底层原理学习(一)—— 简介及基本概念

文章目录 网络协议从入门到底层原理学习&#xff08;一&#xff09;—— 简介及基本概念一、简介1、网络协议的定义2、网络协议组成要素3、广泛的网络协议类型网络通信协议网络安全协议网络管理协议 4、网络协议模型对比图 二、基本概念1、网络互连模型2、计算机之间的通信基础…...

centos密码过期导致navicat无法通过SSH登录阿里云RDS问题

具体错误提示&#xff1a;2013 - Lost connection to server at "hand hake: reading initial communication packet, system error: 0 解决办法&#xff1a;更新SSH服务器密码...

对于pytorch和对应pytorch网站的探索

一、关于网站上面的那个教程: 适合PyTorch小白的官网教程&#xff1a;Learning PyTorch With Examples - 知乎 (zhihu.com) 这个链接也是一样的&#xff0c; 总的来说&#xff0c;里面讲了这么一件事: 如果没有pytorch的分装好的nn.module用来继承的话&#xff0c;需要设计…...

和AI聊天:动态规划

动态规划 动态规划&#xff08;Dynamic Programming&#xff0c;简称 DP&#xff09;是一种常用于优化问题的算法。它解决的问题通常具有重叠子问题和最优子结构性质&#xff0c;可以通过将问题分解成相互依赖的子问题来求解整个问题的最优解。 动态规划算法主要分为以下几个步…...

微信小程序——使用插槽slot快捷开发

微信小程序的插槽&#xff08;slot&#xff09;是一种组件化的技术&#xff0c;用于在父组件中插入子组件的内容。通过插槽&#xff0c;可以将父组件中的一部分内容替换为子组件的内容&#xff0c;实现更灵活的组件复用和定制。 插槽的使用步骤如下&#xff1a; 在父组件的wx…...

大数据技术之Hadoop:使用命令操作HDFS(四)

目录 一、创建文件夹 二、查看指定目录下的内容 三、上传文件到HDFS指定目录下 四、查看HDFS文件内容 五、下载HDFS文件 六、拷贝HDFS文件 七、HDFS数据移动操作 八、HDFS数据删除操作 九、HDFS的其他命令 十、hdfs web查看目录 十一、HDFS客户端工具 11.1 下载插件…...

静态路由配置实验:构建多路由器网络拓扑实现不同业务网段互通

文章目录 一、实验背景与目的二、实验拓扑三、实验需求四、实验解法1. 配置 IP 地址2. 按照需求配置静态路由&#xff0c;实现连接 PC 的业务网段互通 摘要&#xff1a; 本实验旨在通过配置网络设备的IP地址和静态路由&#xff0c;实现不同业务网段之间的互通。通过构建一组具有…...

Python函数的概念以及定义方式

一. 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 二. 什么是函数&#xff1f; 假设你现在是一个工人&#xff0c;如果你实现就准备好了工具&#xff0c;等你接收到任务的时候&#xff0c; 直接带上工…...

【数学建模竞赛】超详细Matlab二维三维图形绘制

二维图像绘制 绘制曲线图 g 是表示绿色 b--o是表示蓝色/虚线/o标记 c*是表示蓝绿色(cyan)/*标记 ‘MakerIndices,1:5:length(y) 每五个点取点&#xff08;设置标记密度&#xff09; 特殊符号的输入 序号 需求 函数字符结构 示例 1 上角标 ^{ } title( $ a…...

2023国赛数学建模E题思路代码 黄河水沙监测数据分析

E题最大的难度是数据处理&#xff0c;可以做一个假设&#xff0c;假设一定时间内流量跟含沙量不变&#xff0c;那么我们可以对数据进行向下填充&#xff0c;把所有的数据进行合并之后可以对其进行展开特性分析&#xff0c;在研究调水调沙的实际效果时&#xff0c;可以先通过分析…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验&#xff0c;以及大语言模型的分析能力&#xff0c;我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际&#xff0c;我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测&#xff0c;聊作存档。等到明…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...