Python:正则表达式速通,码上上手!

1前言

正则表达式(Regular Expression)是一种用来描述字符串模式的表达式。它是一种强大的文本匹配工具,可以用来搜索、替换和提取符合特定模式的文本。

正则表达式由普通字符(例如字母、数字、符号等)和元字符(用于描述模式的特殊字符)组成。通过结合这些字符,可以创建一个模式,用来匹配文本中符合特定规则的部分。

 正则表达式在我们日常开发中十分常用,可以用来数据提取文本处理,同时也是面试中比较常问的问题,学好正则表达式是Python开发工程师的必备项!

看了一下网上很多正则表达式的文章,对于小白来说实在有点难接受

1  符号 .

匹配任意的单个字符

import re
context = '''
    苹果是绿色的,橘子是黄色的,头发是黑色的
'''
##  r 表达不发生转义
p = re.compile(r'.色')
print(p.findall(context))
## ['绿色', '黄色', '黑色']

2  符号 *

匹配前面子表达式任意次(包括0次)  常常与 .  搭配使用

p = re.compile(r'是.*')
print(p.findall(context))
#['是绿色的,', '是黄色的,', '是黑色的']
p = re.compile(r'.*是')
print(p.findall(context))
#['苹果是', '橘子是', '头发是']
context = "我是是是是大帅哥,\n你是嘿嘿黑,\n欸我的饭呢"
p = re.compile(r'是*')
print(p.findall(context))
#['', '是是是是', '', '', '', '', '', '', '是', '', '', '', '', '', '', '', '', '', '', '']

3  符号 +

和 * 类似   表示至少出现一次

context = "我是是是是大帅哥,\n你是嘿嘿黑,\n欸我的饭呢"
p = re.compile(r'是+')
print(p.findall(context))
#['是是是是', '是']

4  符号 {}

指定匹配次数    

p = re.compile(r'是{2,5}')
#print(p.findall(context))
#['是是是是']
context = '''我的电话号码是12345678901,地址在深圳技术大学'''
p = re.compile(r'\d{11}')
print(p.findall(context))
#['12345678901']

5  符号 ?

是否贪心:

贪婪模式和非贪婪模式

'*' '+' 都是贪心的,会尽量多地匹配

在  '*'  '+'  之后加上  '?'  表示非贪心

context = '''<1><2><3><4>'''
p = re.compile(r'<.*?>')
#print(p.findall(context))
#['<1>', '<2>', '<3>', '<4>']
p = re.compile(r'<.*>')
#print(p.findall(context))
#['<1><2><3><4>']     #贪心

 6  符号 \

①转义

②特定字符

\d  匹配数字                      \D     匹配不是数字的

\s  匹配任意地空白字符    \S     匹配非空白

\w 匹配文字字符(数字、字母、下划线)\W 匹配非文字字符

7  符号 [] 

context = '''
leo,qq1234567890,18
penry,qq2234567890,19
anry,qq09878976454,20
makerry,qq1456789091,18'''
p = re.compile(r'qq[123]\d{9}')
print(p.findall(context))
#['qq1234567890', 'qq2234567890', 'qq1456789091']

 8  符号 ^  

非  与 [] 搭配   也可以表示匹配开口

context = "abc123,123abc,hekl1,his12,213f,abc"
p = re.compile(r'[a-z]+[0-9]{3}')
#print(p.findall(context))
#['abc123']
p = re.compile(r'[^0-9]{3}')
print(p.findall(context))
#['abc', 'abc', ',he', ',hi', 'f,a']

单行模式:匹配文本的起始位置

多行模式:匹配文本每行的起始位置

context = '''
001-apple-60,\n
002-pear-70,\n
003-banner-30'''
p = re.compile(r'^\d+',re.MULTILINE)  ##   缺省是单行    M是多行模式    
print(p.findall(context))
#['001', '002', '003']

9  符号 $

从文本末开始匹配

context = '''
001-apple-60
002-pear-70
003-banner-30'''
p = re.compile(r'^\d+',re.MULTILINE)  ##   缺省是单行    M是多行模式    
print(p.findall(context))
#['001', '002', '003']
p = re.compile(r'\d+$',re.MULTILINE)
print(p.findall(context))
#['60', '70', '30']

10  符号 () 

分组提取

context = '''
苹果是绿色的,\n橘子是黄色的,\n头发是黑色的
'''
##   消除标识符
p = re.compile(r'(.+)是')
#print(p.findall(context))
#['苹果', '橘子', '头发']
p = re.compile(r'(.+)是(.+色)的')
#print(p.findall(context))
#[('苹果', '绿色'), ('橘子', '黄色'), ('头发', '黑色')]
context = '''
leo,qq1234567890,18
penry,qq2234567890,19
anry,qq09878976454,20
makerry,qq1456789091,18'''
p = re.compile(r'(.+),qq([123]\d{9})')
#print(p.findall(context))
#[('leo', '1234567890'), ('penry', '2234567890'), ('makerry', '1456789091')]

11  \number

分组概念的举例:匹配ABAC或者AABB的成语

引用前面匹配的第n个组的内容

## 找出 ABAC AABB 型的成语
#           123        45    6
pattern = r'(((.).\3.)|((.)\5(.)\6))'
#              A B AC |  A  A B  B
## 找出 AABC ABAC 型的成语
#           123        45
pattern = r'(((.)\3..)|((.).\5.))'
#              A  ABC    A B AC

看到这里你已经掌握了基本的正则表达式的使用‘姿势’了,在日常的大部分使用场景中都足以应对了,恭喜你!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/281528.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NFS的基本使用

#江南的江 #每日鸡汤&#xff1a;岁月匆匆&#xff0c;时光荏苒&#xff0c;感悟人生路漫漫&#xff0c;不忘初心方得始终。 #初心和目标&#xff1a;和从前的自己博弈。 NFS(存储共享服务) 本文要点摘要&#xff1a; 下面将讨论什么是NFS&#xff0c;如何配置NFS&#xff0c;…

自然语言处理(第17课 文本分类和聚类)

一、学习目标 1.学习文本分类的两种传统机器学习方法&#xff1a;朴素贝叶斯和支持向量机 2.学习文本分类的深度学习方法 3.学习文本分类的性能评估标准 4.学习文本聚类的相似性度量、具体算法、性能评估 二、文本分类 1.概述 将文本分类&#xff0c;主要工作是让机器分析文…

迅为RK3588开发板RTMP推流之视频监控之搭建 RTMP 媒流体服务器

1.安装 nginxrtmp 运行所要用到的库和依赖环境 apt-get update apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev openssl 2. 下 载 nginx-1.20.2 源 码 ( 下 载 地 址 &#xff1a; http://nginx.org/download/nginx-1.20.2.tar.gz) 和nginx-…

【力扣题解】P226-翻转二叉树-Java题解

&#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【力扣题解】 文章目录 【力扣题解】P226-翻转二叉树-Java题解&#x1f30f;题目描述&#x1f4a1;题解&#x1f30f;总结…

MySQL高级SQL语句补充

目录 1.空值&#xff08;NULL&#xff09;和 无值&#xff08; &#xff09;的区别 2.正则表达式 3.存储过程 存储过程的优点 创建存储过程 调用存储过程 查看存储过程 存储过程的参数 IN 输入参数 OUT 输出参数 INOUT 输入输出参数 删除存储过程 存储过程的控制语…

QT中的信号与槽的讲解

文章目录 信号及其特点槽及其特点代码演示标准信号与标准槽函数方式一方式二 自定义信号和槽connect()函数信号和槽函数存在函数重载的情况下Qt的信号槽机制注意事项 信号及其特点 信号&#xff1a;是一种特殊的函数&#xff0c;又称信号函数&#xff0c;俗称信号&#xff0c;…

vue 项目 添加 页面上方 NProgress进度条

NProgress官网和Github地址 路由 跳转时 页面上方 和 右上角 会有一个加载进度 安装 使用npm安装 npm install --save nprogress 基本用法 main.js 引入 import NProgress from “nprogress”; import “nprogress/nprogress.css”; 开关和关闭 start()开启NProgress进度条d…

李宏毅 自然语言处理(Voice Conversion) 笔记

前一章笔记&#xff1a;李宏毅 自然语言处理&#xff08;Speech Recognition&#xff09; 笔记 引入 什么是voice conversion&#xff1f; 输入一段声音&#xff0c;输出另一段声音&#xff0c;我们希望这两端声音&#xff1a;内容一样&#xff0c;其他方面不一样&#xff08…

移动硬盘打不开怎么办?没有比这更好的办法了

移动硬盘打不开是常见故障&#xff0c;可能的原因有很多&#xff0c;例如硬盘驱动器故障、文件系统损坏、分区表错误等。本文将详细分析这些原因&#xff0c;并提供相应的解决方法&#xff0c;帮助您解决移动硬盘打不开的问题。 当移动硬盘打不开时&#xff0c;为了保留其中的文…

web:[BJDCTF2020]The mystery of ip(ssti模板注入、Smarty 模板引擎)

题目 进入页面显示如下 点击flag页面得到ip 点击hint页面 在hint.php的源代码页面中发现 由题目可以知道要从ip入手 这里尝试抓包加上X-Forwarded-For请求头修改为127.0.0.1 因为直接将127.0.0.1输出到页面&#xff0c;可以猜测是ssti模板注入 可以继续验证 这里发现输入什么…

<JavaEE> TCP 的通信机制(四) -- 流量控制 和 拥塞控制

目录 TCP的通信机制的核心特性 五、流量控制 1&#xff09;什么是“流量控制”&#xff1f; 2&#xff09;如何做到“流量控制”&#xff1f; 3&#xff09;“流量控制”的作用 六、拥塞控制 1&#xff09;什么是“拥塞控制”&#xff1f; 2&#xff09;如何做到“拥塞…

用通俗易懂的方式讲解大模型:ChatGLM3-6B 部署指南

最近智谱 AI 对底层大模型又进行了一次升级&#xff0c;ChatGLM3-6B 正式发布&#xff0c;不仅在性能测试和各种测评的数据上有显著提升&#xff0c;还新增了一些新功能&#xff0c;包括工具调用、代码解释器等&#xff0c;最重要的一点是还是保持 6B 的这种低参数量&#xff0…

ESP32入门八(DHT温湿度传感器)

在本章中&#xff0c;将介结DHT温湿度传感器的使用&#xff0c;本文中所使用的版本为DHT11。 传感器介绍 DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度5%RH&#xff0c; 温度2℃&#xff0c;量程湿度5~95%RH&#xff0c; 温度-20~60℃ 图样&#xff1a; 以下为…

C语言-第十七周做题总结-数组2

id&#xff1a;464 A.求矩阵各行元素之和 题目描述 本题要求编写程序&#xff0c;求一个给定的mn矩阵各行元素之和。 输入 输入第一行给出两个正整数m和n&#xff08;1≤m, n≤6&#xff09;。随后m行&#xff0c;每行给出n个整数&#xff0c;其间以空格分隔。 输出 每行…

概率论基础复习题

一、填空题 二、选择题 答案&#xff1a;B 答案&#xff1a;C 答案&#xff1a;C 答案&#xff1a;D。统计量不含任何未知参数。 答案&#xff1a;A 答案&#xff1a;C 样本均值是总体均值的无偏估计&#xff1b;样本方差是总体方差的无偏估计。 答案&#xff1a;B。统计值是一…

appium安装运行报错的解决方案

appium版本2.3 java17 运行报错&#xff1a; Caused by: org.openqa.selenium.SessionNotCreatedException: Could not start a new session. Response code 500. Message: An unknown server-side error occurred while processing the command. Original error: Could not…

【hcie-cloud】【14】华为云Stack版本升级

文章目录 前言华为云Stack版本升级介绍华为云Stack 8.1.1升级总体概览单Region升级步骤介绍多Region的升级顺序版本升级工具链介绍 华为云Stack版本升级主要操作步骤升级信息收集方法升级方案制定 - 策略配置升级方案制定 - 创建任务升级方案制定 - 生成方案升级软件包下载步骤…

Matlab figure窗口最大化 窗口全屏 图表窗口最大化

我有一个项目&#xff0c;需要把多个数据文件画成的曲线一个个保存为图片&#xff0c;然后再进行集中对比分析。程序运行后&#xff0c;打开目录下保存的图片&#xff0c;发现图片的尺寸都很小&#xff0c;画质也不清晰&#xff0c;后来发现原来matlab显示图片的时候&#xff0…

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…

计算机毕业设计------ssm茶叶溯源系统

项目介绍 茶叶溯源系统&#xff0c;分为前台与后台。普通用户可在前台通过18位的编码查询茶叶的出售历史。 后台分为两种角色&#xff0c;管理员与经销商&#xff1b; 管理员主要功能包括&#xff1a; 主界面&#xff1b; 管理员管理&#xff1a;管理员列表、添加管理员&am…