当前位置: 首页 > 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;要细致到什么程度&…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

测试markdown--肇兴

day1&#xff1a; 1、去程&#xff1a;7:04 --11:32高铁 高铁右转上售票大厅2楼&#xff0c;穿过候车厅下一楼&#xff0c;上大巴车 &#xffe5;10/人 **2、到达&#xff1a;**12点多到达寨子&#xff0c;买门票&#xff0c;美团/抖音&#xff1a;&#xffe5;78人 3、中饭&a…...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)

目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 &#xff08;1&#xff09;输入单引号 &#xff08;2&#xff09;万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

pgsql:还原数据库后出现重复序列导致“more than one owned sequence found“报错问题的解决

问题&#xff1a; pgsql数据库通过备份数据库文件进行还原时&#xff0c;如果表中有自增序列&#xff0c;还原后可能会出现重复的序列&#xff0c;此时若向表中插入新行时会出现“more than one owned sequence found”的报错提示。 点击菜单“其它”-》“序列”&#xff0c;…...