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

Python的正则表达式使用

Python的正则表达式使用

  • 定义
  • 使用场景
    • 替换
    • 分割
  • 常用的正则表达符号
    • 查原字符
    • 英文状态的句号点 .
    • 反斜杠 \
    • 英文的[]
    • 英文的()
    • 英文的?
    • 加号 +
    • 星号 *
    • 英文状态的大括号 {}
  • 案例

定义

正则表达式是指专门用于描述或刻画字符串内在规律的表达式。

使用场景

无法通过切片,将字符串的子串返回。
借助于replace方法,无法完成非固定值或非固定位置值的替换。
借助于split方法,无法按照多种值实现字符串的分割。

findall(pattern, string, flags=0)

pattern:指定需要匹配的正则表达式。
string:指定待处理的字符串。
flags:指定匹配模式,常用的值可以是re.I、re.M、re.S和re.X。re.I的模式是让正则表达式对大小写不敏感;re.M的模式是让正则表达式可以多行匹配;re.S的模式指明正则符号,即可以匹配任意字符,包括换行符\n;re.X模式允许正则表达式可以写得更加详细,如多行表示、忽略空白字符、加入注释等。

替换

sub(pattern, repl, string, count=0, flags=0)

pattern:同findall函数中的pattern。
repl:指定替换成的新值。
string:同findall函数中的string。
count:用于指定最多替换的次数,默认为全部替换。
flags:同findall函数中的flags。

分割

split(pattern, string, maxsplit=0, flags=0)

pattern:同findall函数中的pattern。
maxsplit:用于指定最大分割次数,默认为全部分割。
string:同findall函数中的string。
flags:同findall函数中的flags。

常用的正则表达符号

使用这些函数,需要导入re功能包

查原字符

指代直接存在于字符串内部的子串。

# 导入第三方包
import re
# 提取出字符串中的Python子串
s1 = '看了博主的Python的文章,感觉Python很简单,学会了!'
out1 = re.findall('Python', s1)
print(out1)

输出:

[‘Python’, ‘Python’]

英文状态的句号点 .

英文的:‘.’ 指代任意字符(如数字、字母、标点符号、汉字等),但除了换行符\n。

# 导入第三方包
import re
# 提取出动力的值
s2 = '此次宝马主要搭载了1.5L和1.5T两种动力的发动机。凯迪拉克则搭载了1.0T和1.8T的动力。'
out2 = re.findall('1...',s2)
out3 = re.findall('1\...',s2) # \. 代表小数点(转义一下)
print(out2)
print(out3)

[‘1.5L’, ‘1.5T’, ‘1.0T’, ‘1.8T’]
[‘1.5L’, ‘1.5T’, ‘1.0T’, ‘1.8T’]

反斜杠 \

反斜杠 \ 表示转义符,用于转换含义的符号。
\n:指代换行;
\t:指代Tab制表符;
\d:指代0~9中的任一数字;
\s:指代任意一种空白(如空格、Tab、换行等);
\w:指代字母、数字和下划线中的任意一种;(52:大小字 + 10:数字0-9 + 1下划线 = 63种)
. :指代句号点本身;
若是想打 \ 则用\\

# 导入第三方包
import re
# 剔除字符串中的所有空白
s3 = ('距离2019北京马拉松开跑只有两周时间了,\n今年的北京马拉松预报名人数超过16万人,\t 媒体公布的中签率只有16%左右,再创历年来的新低。\n')
print(s3)
out4 = re.sub('\s','',s3)
print(out4)

输出:

距离2019北京马拉松开跑只有两周时间了,
今年的北京马拉松预报名人数超过16万人,(这有个tab长度) 媒体公布的中签率只有16%左右,再创历年来的新低。
(这有个空白行)
距离2019北京马拉松开跑只有两周时间了,今年的北京马拉松预报名人数超过16万人,媒体公布的中签率只有16%左右,再创历年来的新低。

英文的[]

指代字符集合,当需要特定字符匹配时,可以选择中括号。

# 导入第三方包
import re
# 取出手机号信息
s4 = '用户联系方式:13612345566,用户编号为11011254321'
out5 = re.findall('1[356789]\d\d\d\d\d\d\d\d\d', s4) # 第二位为356789中的一个
print(out5)
# 提取出动力
s5 = '通过对比新朗逸1.5L和1.5T两种动力在1.5年行驶期后的数据。发现1.5T的口碑相对较好!'
out6 = re.findall('1.5[a-zA-Z]',s5) # 取出a-z或A-Z
print(out6)
# 或
out7 = re.findall('1.5[TL]',s5) # 取出a-z或A-Z
print(out7)

输出:

[‘13612345566’]
[‘1.5L’, ‘1.5T’, ‘1.5T’]
[‘1.5L’, ‘1.5T’, ‘1.5T’]

英文的()

指代特定内容的截取(抠)。

# 导入第三方包
import re
# 提取出用户的年龄
s6 = 'id:1, name:Tom, age:3, gender:1; id:2, name:Lily, age:5, gender:0'
print(re.findall('\d',s6))
print(re.findall('age:\d',s6))
print(re.findall('age:(\d)',s6))

输出:

[‘1’, ‘3’, ‘1’, ‘2’, ‘5’, ‘0’]
[‘age:3’, ‘age:5’]
[‘3’, ‘5’]

英文的?

表示匹配前一个字符匹配,0次或1次。

# 超链接的匹配
URL1 = 'https://www.baidu.com/'
URL2 = 'http://www.gov.cn/'
pattern = 'https?://www\..*?'

这样https和http都能匹配上了。

加号 +

表示匹配前一个字符匹配,1次及以上。

# 邮箱地址的匹配
email1 = 'Lsxxx2011@163.com'
email2 = '654088115@qq.com'
pattern = '[0-9a-zA-Z_\.\-]+@[a-zA-Z0-9_\-]+\.com'

星号 *

表示匹配前一个字符0次及以上。

# 提取出产品名称中含奶粉字样的产品
prod = ['婴儿袜', '亨氏奶粉', '奶粉勺', '多功能奶瓶', '幼儿奶粉量筒', '磨牙棒']
res = []
for i in prod:res.extend(re.findall('.*奶粉.*', i))
print(res)

输出:

[‘亨氏奶粉’, ‘奶粉勺’, ‘幼儿奶粉量筒’]

英文状态的大括号 {}

表示匹配前一个字符特定的次数或范围。
{m}:匹配前一个字符m次;
{m,}:匹配前一个字符至少m次;
{m,n}:匹配前一个字符m~n次;
{,n} :匹配前一个字符之多n次;

# 手机号码的匹配
pattern = '1[356789]\d{9}'
# 至少6个长度的密码
pattern = '\w{6,}'
# 区号信息
pattern = '0\d{2,3}'

案例

# 导入用于正则表达式的re模块
import re
# 取出字符中所有的天气状态
string1 = "{ymd:'2018-01-01',tianqi:'晴',aqiInfo:'轻度污染'},{ymd:'2018-01-02',tianqi:'阴~小雨',aqiInfo:'优'},{ymd:'2018-01-03',tianqi:'小雨~中雨',aqiInfo:'优'},{ymd:'2018-01-04',tianqi:'中雨~小雨',aqiInfo:'优'}"
print(re.findall("tianqi:'(.*?)'", string1)) # ?为了防止盲目匹配(非贪婪式)

输出:

[‘晴’, ‘阴~小雨’, ‘小雨~中雨’, ‘中雨~小雨’]

# 导入用于正则表达式的re模块
import re
# 取出所有含O字母的单词
string2 = 'Together, we discovered that a free market only thrives when there are rules to ensure competition and fair play, Our celebration of initiative and enterprise'
print(re.findall('\w*o\w*',string2, flags = re.I)) # re.I大小写不敏感
# 将标点符号、数字和字母删除
string3 = '据悉,这次发运的4台蒸汽冷凝罐属于国际热核聚变实验堆(ITER)项目的核二级压力设备,先后完成了压力试验、真空试验、氦气检漏试验、千斤顶试验、吊耳载荷试验、叠装试验等验收试验。'
print(re.sub('[,。、a-zA-Z0-9()]','',string3))

输出:

[‘Together’, ‘discovered’, ‘only’, ‘to’, ‘competition’, ‘Our’, ‘celebration’, ‘of’]
据悉这次发运的台蒸汽冷凝罐属于国际热核聚变实验堆项目的核二级压力设备先后完成了压力试验真空试验氦气检漏试验千斤顶试验吊耳载荷试验叠装试验等验收试验

# 导入用于正则表达式的re模块
import re
# 将每一部分的内容分割开
string4 = '2室2厅 | 101.62平 | 低区/7层 | 朝南 \n 上海未来 - 浦东 - 金杨 - 2005年建'
split = re.split('[-\|\n]', string4) # \|转义下表示竖杠本身,split函数是用来分割的
print(split)
split_strip = [i.strip() for i in split] # 循环列表去除前后的空格
print(split_strip)

输出:

['2室2厅 ', ’ 101.62平 ', ’ 低区/7层 ', ’ 朝南 ', ’ 上海未来 ', ’ 浦东 ', ’ 金杨 ‘, ’ 2005年建’]
[‘2室2厅’, ‘101.62平’, ‘低区/7层’, ‘朝南’, ‘上海未来’, ‘浦东’, ‘金杨’, ‘2005年建’]

相关文章:

Python的正则表达式使用

Python的正则表达式使用 定义使用场景查替换分割 常用的正则表达符号查原字符英文状态的句号点 .反斜杠 \英文的[]英文的()英文的?加号 星号 *英文状态的大括号 {} 案例 定义 正则表达式是指专门用于描述或刻画字符串内在规律的表达式。 使用场景 无法通过切片,…...

Elasticsearch:评估 RAG - 指标之旅

作者:Quentin Herreros,Thomas Veasey,Thanos Papaoikonomou 2020年,Meta发表了一篇题为 “知识密集型NLP任务的检索增强生成” 的论文。 本文介绍了一种通过利用外部数据库将语言模型 (LLM) 知识扩展到初始训练数据之外的方法。 …...

【2023.12.4练习】数据库知识点复习测试

概论 数据表:用于存储现实中数据的联系。 储存信息联系。 字段:又称列,如姓名、年龄、编号等。 记录:又称元组,为数据表中的一行,代表了一个实体的信息。 数据库(DB)&#xff1…...

【wvp】测试记录

ffmpeg 这是个莫名其妙的报错,通过排查,应该是zlm哪个进程引起的 会议室的性能 网络IO也就20M...

【若依框架实现上传文件组件】

若依框架中只有个人中心有上传图片组件&#xff0c;但是这个组件不适用于el-dialog中的el-form表单页面 于是通过elementui重新写了一个上传组件&#xff0c;如图是实现效果 vue代码 <el-dialog :title"title" v-model"find" width"600px"…...

玩转大数据5:构建可扩展的大数据架构

1. 引言 随着数字化时代的到来&#xff0c;大数据已经成为企业、组织和个人关注的焦点。大数据架构作为大数据应用的核心组成部分&#xff0c;对于企业的数字化转型和信息化建设至关重要。我们将探讨大数据架构的基本要素和原则&#xff0c;以及Java在大数据架构中的角色&…...

【华为数据之道学习笔记】非数字原生企业的特点

非数字原生企业的数字化转型挑战 软件和数据平台为核心的数字世界入口&#xff0c;便捷地获取和存储了大量的数据&#xff0c;并开始尝试通过机器学习等人工智能技术分析这些数据&#xff0c;以便更好地理解用户需求&#xff0c;增强数字化创新能力。部分数字原生企业引领着云计…...

Kubernetes学习笔记-Part.01 Kubernets与docker

目录 Part.01 Kubernets与docker Part.02 Docker版本 Part.03 Kubernetes原理 Part.04 资源规划 Part.05 基础环境准备 Part.06 Docker安装 Part.07 Harbor搭建 Part.08 K8s环境安装 Part.09 K8s集群构建 Part.10 容器回退 第一章 Kubernets与docker Docker是一种轻量级的容器…...

k8s学习

文章目录 前言一、k8s部署方式二、学习k8s的方式今天主要配置k8s环境的方式今天遇到的是一个在k8s进行初始化的方式&#xff0c;但是发现k8s不能正常初始化总是出现错误&#xff0c;或者在错误中有问题的方式&#xff0c;在网上查询挺多资料需要重新启动kub文件&#xff0c;删除…...

测试:JMeter和LoadRunner比较

比较 JMeter和LoadRunner是两款常用的软件性能测试工具&#xff0c;它们在功能和性能上有一定的相似性和差异。下面从几个方面对它们进行比较&#xff1a; 1. 架构和原理&#xff1a; JMeter和LoadRunner的架构和原理基本相同&#xff0c;都是通过中间代理监控和收集并发客户…...

(C语言)通过循环按行顺序为一个矩阵赋予1,3,5,7,9,等奇数,然后输出矩阵左下角的值。

#include<stdio.h> int main() {int a[5][5];int n 1;for(int i 0;i < 5;i ){for(int j 0;j < 5;j ){a[i][j] n;n 2;}}for(int i 0;i < 5;i ){for(int j 0;j < i;j )printf("%-5d",a[i][j]);printf("\n");}return 0; } 运行截图…...

GitHub项目推荐-Deoldify

有小伙伴推荐了一个老照片上色的GitHub项目&#xff0c;看了简介&#xff0c;还不错&#xff0c;推荐给大家。 项目地址 GitHub - SpenserCai/sd-webui-deoldify: DeOldify for Stable Diffusion WebUI&#xff1a;This is an extension for StableDiffusions AUTOMATIC1111 w…...

微前端qiankun示例 Umi3.5

主应用配置&#xff08;基座&#xff09; 安装包 npm i umijs/plugin-qiankun -D 配置 qiankun 开启 {"private": true,"scripts": {"start": "umi dev","build": "umi build","postinstall": "…...

熬夜会秃头——beta冲刺Day7

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day7团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作…...

IntelliJ IDEA设置中文界面

1.下载中文插件 2. 点击重启IDE 3.问题就解决啦&#xff01;...

RTSP流媒体播放器

rtsp主要还是运用ffmpeg来搭建node后端转发到前端&#xff0c;前端再播放这样的思路。 这里讲的到是用两种方式&#xff0c;一种是ffmpeg设置成全局来实现&#xff0c;一种是ffmpeg放在本地目录用相对路径来引用的方式。 ffmpeg下载地址&#xff1a;http://www.ffmpeg.org/do…...

使用正则表达式时-可能会导致性能下降的情况

目录 前言 正则表达式引擎 NFA自动机的回溯 解决方案 前言 正则表达式是一个用正则符号写出的公式&#xff0c;程序对这个公式进行语法分析&#xff0c;建立一个语法分析树&#xff0c;再根据这个分析树结合正则表达式的引擎生成执行程序(这个执行程序我们把它称作状态机&a…...

Maven生命周期

Maven生命周期 通过IDEA工具的辅助&#xff0c;能很轻易看见Maven的九种生命周期命令&#xff0c;如下&#xff1a; 双击其中任何一个&#xff0c;都会执行相应的Maven构建动作&#xff0c;为啥IDEA能实现这个功能呢&#xff1f;道理很简单&#xff0c;因为IDEA封装了Maven提供…...

深度学习(五):pytorch迁移学习之resnet50

1.迁移学习 迁移学习是一种机器学习方法&#xff0c;它通过将已经在一个任务上学习到的知识应用到另一个相关任务上&#xff0c;来改善模型的性能。迁移学习可以解决数据不足或标注困难的问题&#xff0c;同时可以加快模型的训练速度。 迁移学习的核心思想是将源领域的知识迁…...

面试官:说说synchronized与ReentrantLock的区别

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一波电子书籍资料&#xff0c;包含《Effective Java中文版 第2版》《深入JAVA虚拟机》&#xff0c;《重构改善既有代码设计》&#xff0c;《MySQL高性能-第3版》&…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

计算机基础知识解析:从应用到架构的全面拆解

目录 前言 1、 计算机的应用领域&#xff1a;无处不在的数字助手 2、 计算机的进化史&#xff1a;从算盘到量子计算 3、计算机的分类&#xff1a;不止 “台式机和笔记本” 4、计算机的组件&#xff1a;硬件与软件的协同 4.1 硬件&#xff1a;五大核心部件 4.2 软件&#…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

Python环境安装与虚拟环境配置详解

本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南&#xff0c;适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者&#xff0c;都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...

Cursor AI 账号纯净度维护与高效注册指南

Cursor AI 账号纯净度维护与高效注册指南&#xff1a;解决限制问题的实战方案 风车无限免费邮箱系统网页端使用说明|快速获取邮箱|cursor|windsurf|augment 问题背景 在成功解决 Cursor 环境配置问题后&#xff0c;许多开发者仍面临账号纯净度不足导致的限制问题。无论使用 16…...

el-amap-bezier-curve运用及线弧度设置

文章目录 简介示例线弧度属性主要弧度相关属性其他相关样式属性完整示例链接简介 ‌el-amap-bezier-curve 是 Vue-Amap 组件库中的一个组件,用于在 高德地图 上绘制贝塞尔曲线。‌ 基本用法属性path定义曲线的路径,可以是多个弧线段的组合。stroke-weight线条的宽度。stroke…...