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

Python---正则表达式

专栏:python
个人主页:HaiFan.
专栏简介:Python在学,希望能够得到各位的支持!!!

正则表达式

  • 前言
  • 概念
  • 作用和特点
  • 使用场景
  • 正则符号
  • re模块
    • re.compile()
    • match()
    • search()
    • span()
    • findall()
    • group()
    • sub()
    • split()

前言

在这里插入图片描述

概念

正则表达式是对字符串(包括普通字符(如a到z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符,及其这些特定字符的组合,组成一个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述搜索文本时要匹配一个或多个字符串

正则表达式又称正规表达式,正规表示法,规则表达式,常规表达式,(英语:Regular Expression,在代码中简写为regex,regexp或RE),是计算机科学的一概念,正则表达式使用单个字符串来描述,匹配一系列匹配某个句法规则的字符串,在很多文本编辑器里,正则表达式通常被用来检索,替换那些匹配的某个模式的文本。
来源百度百科

作用和特点

给定一个正则表达式和另一个字符串,我们可以达到如下目的

  1. 给定字符串是否符合正则表达式的过滤逻辑(匹配)
  2. 可以通过正则表达式,从字符串中获取我们想要的特定部分

使用场景

如何判断一个字符串是手机号?
判断邮箱为163或者123的所有合法邮箱地址

正则符号

\A:表示从字符串的开始处匹配
\Z:表示从字符串的结束处匹配,如果存在执行,只匹配到换行前的结束字符串
\b:匹配一个单词边界,也就是说指单词和空格间的位置。
\B:匹配非单词边界。
\d:匹配任意数字,等价于---[0-9]
\D:匹配任意非数字字符,等价于---[^\d]
\s:匹配任意空白字符,等价于---[\t\n\r\f]
\S:匹配任意非空白字符,等价于---[^\s]
\w:匹配任意字母数字及下划线,等价于---[a-zA-Z0-9]
\W:匹配任意非字母数字及下划线,等价于---[^\w]
\\:匹配原义的反斜杠\
---------------------------------------
[]:用于表示一组字符,如果^事第一个字符,则表示的是一个补集,比如[0-9]表示所有的数字,[^0-9]表示除了数字外的字符
.:用于匹配除换行符之外的所有字符
^:用于匹配字符串的开始.及行首
$:用于匹配字符串的末尾(末尾如果有换行符,就匹配换行符前面的那个字符),及行尾
*:用于将前面的模式匹配0次或多次(贪婪模式,及尽可能多的匹配)
+:用于将前面的模式匹配1次或多次(贪婪模式)
?:用于将前面的模式匹配0次或1(贪婪模式)
*?,+?,??是上面三种特殊字符的非贪婪模式(尽可能少的匹配)
{m}:用于验证将前面的模式匹配m次
{m,}:用于验证将前面的模式匹配m次或者多次---> >= m次
{m,n}:用于将前面的模式匹配m次到n次(贪婪模式),即最小匹配m次,最大匹配n次
{m,n}?即上面{m,n}的非贪婪模式
\\:\是转义字符,在特殊字符前面加上\,特殊字符就失去了其所代表的含义,比如\+就仅仅代表加号本身
|:比如A|B用于匹配A或B

re模块

在Python中,使用正则表达式要导入 re模块

import re

re.compile()

complie函数用于编译正则表达式,生成一个正则表达式(Pattern)对像,供match()和search()这两个函数使用
在这里插入图片描述

如何使用:re.compile(pattern,flags)
这个pattern就是一个字符串形式的正则表达式,flags可选,意思是匹配模式,比如:忽略大小写等


import re
msg = '123456'
ret = re.compile('345')
a = ret.search(msg)
print(a)

在这里插入图片描述
这个search是什么,暂时不要关心,后面会说。
通过re.compile('345)可以返回一个正则对象,在这里用的ret来接收,然后通过ret.就可以调用一系列的方法,如match,search等等。当然re模块也提供了与这些方法功能一样的函数,这些函数的第一个参数是模式串。
在这里插入图片描述

match()

在这里插入图片描述

re.match是从字符串的起始位置开始匹配,若没有匹配成功,则返回none。匹配成功则返回第一个匹配的对象

# 语法:
re.match(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import remsg = '123456'a = re.match('345',msg)
b = re.match('123',msg)print(a)
print(b)

在这里插入图片描述

search()

在这里插入图片描述
从头至尾的扫描字符串,若有匹配的则返回第一次匹配的对象,若没有发现的话,就但会None

# 语法
re.search(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import remsg = '123456'a = re.search('345',msg)
b = re.search('456',msg)
c = re.search('123',msg)
d = re.search('245',msg)print(a)
print(b)
print(c)
print(d)

在这里插入图片描述

span()

在match或者search匹配成功后,返回第一个成功匹配的位置,通过span可以只显示匹配成功的位置。

import remsg = '123456'a = re.search('345',msg)print(a.span())

在这里插入图片描述

findall()

在这里插入图片描述
在字符串中找到锁匹配的所有字串,返回一个列表,没有找到能够匹配的,则返回一个空列表。

# 语法
re.findall(pattern, string, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数flags:匹配方式,如:字母大小写的区分等

import remsg = 'AS4DFJ352a3k43jkjv24k4vj234vj234j234jkjv2j4v'a = re.findall('[a-z][0-9][a-z]',msg)
# [a-z]表示a到z的所有字母
# [0-9]表示9个数字
print(a)

在这里插入图片描述

group()

import remsg = '111-12345678'ret = re.match(r'(\d{3}|d{4})-(\d{8})$',msg)
# \d表示匹配任意数字,{3}表示将前面的模式串匹配3次
# $:用于匹配字符串的末尾(末尾如果有换行符,就匹配换行符前面的那个字符),及行尾
print(ret)
print(ret.group(1))
print(ret.group(2))

括号表示分组,group(1)表示第一组内容,group(2)表示第二组内容
在这里插入图片描述

sub()

在这里插入图片描述
正则表达式可以将所有匹配的字符串用不同的字符串进行替换,sub方法提供一个替换值,可以是字符串或者函数,和一个要被处理的字符串。

第一个参数pattern:匹配的正则表达式
第二个参数repl:要替换的内容
第三个参数string:要匹配的
第四个参数count:这是一个可选参数,意思是最大替换次数
第五个参数flags:匹配方式,如:字母大小写的区分等

import remsg = '465423adfs564'ret = re.sub(r'\d+','90',msg)print(ret)

在这里插入图片描述


import redef add(temp):num = temp.group()num = int(num)num += 1return str(num)ret = re.sub(r'\d+',add,'py:100,java:200')print(ret)

在这里插入图片描述
通过\d+可以找到100和200这个字符串,然后进入add函数,执行temp.group(),第一次执行会把100拿出来给num,第二次会把200拿出来。

split()

在这里插入图片描述
这个方法是用于惊醒字符串的分割,将分割之后的内容保存在列表中。

#语法
re.split(pattern, string, maxsplit=0, flags=0):

第一个参数pattern:匹配的正则表达式
第二个参数string:要匹配的字符串
第三个参数maxsplit:分割次数
第四个参数flags:匹配方式,如:字母大小写的区分等

import remsg = '234jhjk34jkjh3kjhjkh3kjhk3'ret = re.split(r'[3]',msg)print(ret)

在这里插入图片描述

import remsg = '234jhjk34jkjh3kjhjkh3kjhk3'ret = re.split(r'[3]',msg,maxsplit=0)
ret1 = re.split(r'[3]',msg,maxsplit=1)print(ret)
print(ret1)

在这里插入图片描述

相关文章:

Python---正则表达式

专栏:python 个人主页:HaiFan. 专栏简介:Python在学,希望能够得到各位的支持!!! 正则表达式前言概念作用和特点使用场景正则符号re模块re.compile()match()search()span()findall()group()sub()…...

Unity入门精要02---纹理

纹理和材质不可分割 本节知识结构 实践:简单贴一张纹理到模型上 首先在属性处添加相关属性 Properties {_Color ("Color Tint", Color) (1, 1, 1, 1)_MainTex ("Main Tex", 2D) "white" {}//加入纹理_Specular ("Specular&q…...

【Day1】一小时入门 python 基础,从安装到入门

文章目录python安装安装python安装 pycharmpython基础输出注释变量输入类型转换运算符自增字符串相关操作比较运算符逻辑运算符条件控制while循环list 列表for 循环range函数元组python 安装 安装python 官网进行下载:官网下载地址这里下载的一直是最新版本的 点…...

2D图像处理:相机标定

文章目录 效果一、相机标定的是什么?二、四个坐标系2.1 世界坐标系(X,Y,Z)2.2 相机坐标系(x,y,x)2.3 图像坐标系2.4 像素坐标系三、坐标系间的变换关系3.1 世界坐标系-->相机坐标系3.2 相机坐标系-->图像坐标系3.3图像坐标系-->像素坐标系四、相机畸变模型4.1 径向…...

windows 下 python 和repo 下载安装环境变量配置

repo 安装成功,但是下载代码 repo init的时候出错 不知道是不是repo windows版本有问题 python 最好下载2.6-2.7版本的 Python Releases for Windows | Python.org 不然下载代码会有问题,下不了,会提示安装2.6-2.7版本的 Windows下成功安…...

jsp进阶

文章目录jsp进阶内容回顾JSP 的九大内置对象内置对象的创建九大内置对象详解四大作用域对象四大作用域范围总结EL 进阶JSTL 标准标签库JSTL 核心标签jsp进阶 内容回顾 jsp 创建 jsp 的工作原理:翻译 --> 编译 --> 运行 翻译:第一次访问 jsp 页面…...

模块化CommonJS、AMD、CMD、ES6

参考链接:https://juejin.cn/post/6844903576309858318 一、 commonjs(node实现、缓存值(浅拷贝),同步,运行时加载) 同步加载模块 module.exportrequire // 定义模块math.js var basicNum …...

Python GUI界面编程-初识

图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。然而这界面若要通过在显示屏的特定位置&#xf…...

【Servlet篇4】cookie和session

在这一篇文章当中,我们提到了什么是cookie和session。 【网络原理8】HTTP请求篇_革凡成圣211的博客-CSDN博客HTTP的常见属性,URL,User-Agent,Refer,get 和post的区别https://blog.csdn.net/weixin_56738054/article/details/1291…...

考研流程,可以进来转一转(考研你不知道的事情)(详细版)

之前有听过好多人说要考研,那么,考研的信息,如何获取呢,考研都有哪些流程呢。 初试开始到考试:↓ 1、了解考研信息。 2、确定自己要报考的专业。(本专业or跨考) 3、选择地区 4、选择要报考的学…...

3.2 LED闪烁流水灯蜂鸣器

LED闪烁1.1 电路连接示意图LED采用低电平点亮的方式,利用ST-Link的3.3V进行供电。1.2程序设计1.21知识储备GPIO配置步骤步骤:1. 第⼀步,使⽤RCC开启GPIO的时钟2. 第⼆步,使⽤GPIO_Init()函数初始化GPIO3. 第三步,使⽤输…...

刷题笔记3 | 203. 移除链表元素、707设计链表,206.反转链表

目录 203. 移除链表元素 707、设计链表 206.反转链表 203. 移除链表元素 题意:删除链表中等于给定值 val 的所有节点。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2: 输入:h…...

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战

[一篇读懂]C语言十一讲:单链表的删除和单链表真题实战1. 与408关联解析及本节内容介绍1 本节内容介绍2. 单链表的删除操作实战3. 单链表真题解读与解题设计1 题目解读2 解题设计第一阶段:双指针找中间结点第二阶段:原地逆置第三阶段&#xff…...

【C++初阶】list的使用

大家好我是沐曦希💕 文章目录一、前言二、构造三、迭代器四、增删查改1.头插头删2.尾插尾删3.查找和插入4.删除五、其他成员函数1.排序和去重2.splice和remove3.resize一、前言 list本质是带头双向循环链表,本文只对list的一些常用接口进行说明&#xf…...

HTML 布局

网页布局对改善网站的外观非常重要。 请慎重设计您的网页布局。 在线实例 使用 <div> 元素的网页布局 如何使用 <div> 元素添加布局。 使用 <table> 元素的网页布局 如何使用 <table> 元素添加布局。 网站布局 大多数网站会把内容安排到多个列中&a…...

如何在虚拟机中安装ikuai软路由系统

首先访问ikuai官网下载固件固件下载-爱快 iKuai-商业场景网络解决方案提供商 (ikuai8.com) 根据需求下载 然后创建一个虚拟机&#xff0c;点击下一步 选择更下载的ISO映像文件&#xff0c;点击下一步 点击下一步 设置一下名称和储存位置&#xff0c;点击下一步 根据需求设置&a…...

Java 多线程 --- 线程协作 wait/notify

Java 多线程 --- 线程协作 wait/notifywait / notifyObject.wait() , Object.notify() / notifyAll()notify 和 wait 的原理notify会导致死锁的问题wait / notify的开销以及问题wait / notify 在多线程中, 如果程序拿到锁之后, 但是没有满足指定条件而不能继续往下执行, 我们可…...

【PyTorch】教程:torch.nn.Hardsigmoid

torch.nn.Hardsigmoid 原型 CLASS torch.nn.Hardsigmoid(inplaceFalse) 参数 inplace (bool) – 默认为 False 定义 Hardsigmoid(x){0if x≤−3,1if x≥3,x/61/2otherwise\text{Hardsigmoid}(x) \begin{cases} 0 & \text{if~} x \le -3, \\ 1 & \text{if~} x \ge 3…...

【手把手一起学习】(八) Altium Designer 20修改和自定义原理图标题栏

1 修改原理图标题栏 直接对原理图标题栏属性进行修改&#xff0c;操作如图所示&#xff1a; 修改后&#xff0c;并不会显示&#xff0c;故该方法不可用&#xff1a; 正确的操作如下&#xff0c;先选择合适的模板&#xff1a; 然后&#xff0c;进行属性的修改&#xff1a; 此时…...

业务流程测试

用例设计主要问题主要问题存在于&#xff1a;1、测试点分析&#xff1a;逻辑性不强对于整个页面功能划分不清晰&#xff1b;不同测试点归类不清晰&#xff1b;不能形成相对固定的套路&#xff0c;书写耗费大量时间...2、测试用例&#xff1a;关于&#xff0c;要细致到什么程度&…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

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

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

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

【JVM面试篇】高频八股汇总——类加载和类加载器

目录 1. 讲一下类加载过程&#xff1f; 2. Java创建对象的过程&#xff1f; 3. 对象的生命周期&#xff1f; 4. 类加载器有哪些&#xff1f; 5. 双亲委派模型的作用&#xff08;好处&#xff09;&#xff1f; 6. 讲一下类的加载和双亲委派原则&#xff1f; 7. 双亲委派模…...

虚拟电厂发展三大趋势:市场化、技术主导、车网互联

市场化&#xff1a;从政策驱动到多元盈利 政策全面赋能 2025年4月&#xff0c;国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》&#xff0c;首次明确虚拟电厂为“独立市场主体”&#xff0c;提出硬性目标&#xff1a;2027年全国调节能力≥2000万千瓦&#xff0…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...