py11-python之正则-re

一、正则表达式

1、定义:

    正则表达式,又称规则表达式(Regular Expression),是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式(规则)的文本
    简单来说,正则表达式就是使用: 字符串定义规则,并通过规则去验证字符串是否匹配
比如通过正则规则:(^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$),即可匹配一个字符由是否是标准邮箱格式

2、正则的三个基础方法:

Python正则表达式使用re模块,并基于re模块中三个基础方法来做正则匹配,分别是:match、search、findall
(1)re.match(匹配规则,被匹配字符串):从被匹配字符串开头进行匹配,匹配成功返回匹配对象(包含匹配的信息),匹配不成功返回空

s='python haha python hehe python yoyo'
result = re.match('python',s)
print(result)  # 返回:<re.Match object; span=(0,6),match='python'>
print(result.span())  # 返回:(0, 6)
print(result.group())  # 返回:python
s ='1python hahapython hehepython yoyo'
result = re.match('python', s)
print(result)  # 返回:None

(2)search(匹配规则,被匹配字符串):搜索整个字符串,找出匹配的。从前向后,找到第一个后,就停止,不会继续向后
若整个字符串都找不到,返回None

s ='1python666haha666python666'
result = re.search('python', s)
print(result)   # <re.Match object;span=(1,7),match='python'>
print(result.span())  # (1,7)
print(result.group())  # python

(3)findall(匹配规则,被匹配字符串):匹配整个字符串,找出全部匹配项
找不到返回空list:[]

s ='1python666haha666python666'
result = re.findall('python', s)
print(result)  # ['python','python']

3、元字符匹配

(3-1)单字符匹配:
. :匹配任意1个字符(除了\n),.匹配点本身
[] :匹配[]中列举的字符,[]内可以写:[a-zA-Z0-9]这三种范围组合或指定单个字符如[aceDFG135]
\d :匹配数字,即0-9
\D :匹配非数字
\s :匹配空白,即空格、tab键
\S :匹配非空白
\w :匹配单词字符,即a-z、A-Z、0-9、-
\W :匹配非单词字符
备注:字符串的r标记,表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符
小例子:

s='12@asd'
# 1.找出全部数字: 
re.findall(r'\d', s)
# 2.找出特殊字符:
re.findall(r'\W', s)
# 3.找出全部英文字母:
re.findall(r'[a-zA-Z]', s)

(3-2)数量匹配
* :匹配前一个规则的字符出现0至无数次
+ :匹配前一个规则的字符出现1至无数次
? :匹配前一个规则的字符出现0次或1次
{m} :匹配前一个规则的字符出现m次
{m,} :匹配前一个规则的字符出现最少m次
{m,n} :匹配前一个规则的字符出现m到n次

(3-3)边界匹配
^ :匹配字符串开头
$ :匹配字符串结尾
\b :匹配一个单词的边界
\B :匹配非单词边界

(3-4)分组匹配
| :匹配左右任意一个表达式
() :将括号中字符作为一个分组

4、小例子

1)匹配账号,只能由字母和数字组成,长度限制6到10位

r = '^[0-9a-zA-Z]{6,10}$'
s ='123456_'
print(re.findall(r,s))

(2)匹配qq号,要求纯数字,长度5-11,第一位不为0

r = r'^[1-9][0-9][4,10]$'
s = '123453678'
print(re.findall(r,s))

(3)匹配邮箱地址,只允许q9、163、gmail这三种邮箱地址

r = r'(^[\w-]+(\.[\w-]+)*@(qq|163|gmail)(\.[\w-]+)+$)'
s = 'a.b.c.d.e.f.g@126.com.a.z.c.d.e'
print(re.match(r,s))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习-协同过滤

1、协同过滤要解决的问题 协同过滤算法主要用于推荐系统&#xff0c;推荐系统是信息过载所采用的措施&#xff0c;面对海量的数据信息&#xff0c;从中快速推荐出符合用户特点的物品。一些人的“选择恐惧症”、没有明确需求的人。 解决如何从大量信息中找到自己感兴趣的信息。…

编程笔记 html5cssjs 036 CSS应用方式

编程笔记 html5&css&js 036 CSS应用方式 一、三种CSS应用方式二、外部 CSS三、内部 CSS四、行内 CSS小结 如何在网页中使用CSS?实际上有三种方式。 一、三种CSS应用方式 有三种插入样式表的方法&#xff1a; 外部 CSS内部 CSS行内 CSS 二、外部 CSS 通过使用外部样…

爬虫逆向破解翻译接口参数

Python 请求baidu翻译接口&#xff1a;https://fanyi.baidu.com/v2transapi?fromzh&toen 步骤一&#xff1a; 查找构建请求参数 JS 断点发现如下参数&#xff1a; w {from: _.fromLang,to: _.toLang,query: e,transtype: i,simple_means_flag: 3,sign: b(e),token: windo…

Java8后 进阶特性集锦

自Java 8以后&#xff0c;随着新版本的发布&#xff0c;Java继续引入了多项新特性来进一步增强语言的表达力和功能。以下是一些Java 8之后版本中的进阶语法特性&#xff0c;包括示例代码&#xff1a; 局部变量类型推断 (Java 10): Java 10引入了var关键字&#xff0c;允许在局部…

Tomcat 的 work 目录缓存导致的JSP页面图片更新问题

一、问题分析 1. 修改后重新部署没有变化 笔者之前部署了一个后台管理项目&#xff0c;通过它来发布课程内容&#xff0c;其中有一个 JSP 课程页面&#xff0c;在该 JSP 页面里也引用了类文件 Constant.java 里的一个变量&#xff08;ALIYUN_OSS_PATH&#xff09;&#xff0c;…

使用ffmpeg实现音频静音修剪

1 silenceremove介绍 本文主要介绍在 FFmpeg 命令中使用 silenceremove filter 进行音频静音的修剪。 1.1 start_x参数 参数名说明取值范围默认值start_periods设置是否应在音频开头修剪音频。0 表示不应从一开始就修剪静音。当指定一个非 0 值时&#xff0c;它会修剪音频直…

2022-ECCV-Explaining Deepfake Detection by Analysing Image Matching

一、研究背景 1.大量工作将深度伪造检测作为一个二分类任务并取得了良好的性能。 2.理解模型如何在二分类标签的监督下学习伪造相关特征仍难是个艰巨的任务。 3.视觉概念&#xff1a;具有语义的人脸区域&#xff0c;如嘴、鼻子、眼睛。 二、研究目标 1.验证假设&#xff0c;并…

虹科分享 | 用Redis为LangChain定制AI代理——OpenGPTs

文章速览&#xff1a; OpenGPTs简介Redis在OpenGPTs中的作用在本地使用OpenGPTs在云端使用OpenGPTsRedis与LangChain赋能创新 OpenAI最近推出了OpenAI GPTs——一个构建定制化AI代理的无代码“应用商店”&#xff0c;随后LangChain开发了类似的开源工具OpenGPTs。OpenGPTs是一…

OpenCV——多分辨率LBP的计算方法

目录 一、算法原理1、原理概述2、参考文献 二、代码实现三、结果展示 OpenCV——多分辨率LBP的计算方法由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、算法原理 1、原理概述 基本LBP算子虽然在早期…

Golang条件编译 | 获取系统的磁盘空间内存占用demo | gopsutil/disk库(跨平台方案)

文章目录 一、Golang条件编译1. 构建标签( Build tags)2. 文件后缀&#xff08;File suffixes&#xff09; 二、GO golang 获取磁盘空间 条件编译思路 三、【推荐】使用github.com/shirou/gopsutil/disk这个库&#xff0c;如何获取机器下不同磁盘分区的内容 一、Golang条件编译…

Vue.js设计与实现阅读-2

Vue.js设计与实现阅读-2 1、前言2、框架设计的核心要素2、1 提升用户体验2、2 控制代码体积2、3 Tree-Shaking2、4 特性开关2、5 错误处理 1、前言 上一篇我们了解到了 命令式和声明式的区别&#xff0c;前者关注过程&#xff0c;后者关注结果了解了虚拟dom存在的意义&#x…

Ubuntu22.04 netplan 网络配置

Ubuntu18.04修改IP地址的方法(error in network definition ......is missing /prefixlength)_error in network definition: expected sequence-CSDN博客 Ubuntu20.04 单网卡配置多ip_ubuntu单网卡多ip-CSDN博客 ubuntu配置多网段IP-CSDN博客 Netplan使用&#xff08;高版…

把应用转为LINUX服务失败,两个奇怪错误

应用经常崩溃&#xff0c;于是就想转为服务&#xff0c;让系统帮忙重启。这个事情当然信心满满&#xff0c;咱之前做过&#xff0c;最近也刚刚实验过。想法是好的&#xff0c;现实是残酷的&#xff0c;遇到两个问题无解&#xff1a; 访问内存失败 经过定位&#xff0c;确认是…

CMake入门教程【实战篇】Ninja环境搭建与加速项目构建

文章目录 1.什么是Ninja?2.为什么选择Ninja?3.Ninja的特点4.如何使用Ninja5.vscode+msvc+cmake+ninja示例命令行操作示例vscode1.什么是Ninja? Ninja是一个专注于速度的小型构建系统。与其他构建系统不同,Ninja采用了一种低级方法,旨在实现快速的增量构建。它的设计理念是…

笔记软件内怎么查看文章字数 笔记查看字数的操作步骤

在记录生活点滴、工作要务时&#xff0c;你是否曾像我一样&#xff0c;为了知道写了多少字而犯愁&#xff1f;尤其是在需要精确控制字数时&#xff0c;那种焦虑感更是如影随形。 记得有一次&#xff0c;我为了一个项目报告苦思冥想&#xff0c;好不容易写了个初稿&#xff0c;…

Java--ListUtil工具类,实现将一个大列表,拆分成指定长度的子列表

文章目录 前言实现代码执行结果 前言 在项目中有时会出现列表很大&#xff0c;无法一次性批量操作&#xff0c;我们需要将列表分成指定大小的几个子列表&#xff0c;一份一份进行操作&#xff0c;本文提供这样的工具类实现这个需求。 实现代码 以下为代码实现&#xff1a; …

源码编译FFmpeg4.3

FreeSWITCH的mod_av模块目前&#xff08;1.10.11&#xff09;暂不支持FFmpeg4.4&#xff08;或者更高版本&#xff09;&#xff0c;但4.3就没问题 最近试了试源码编译FFmpeg4.3&#xff0c;记录如下&#xff08;系统centos7.9&#xff09;&#xff1a; git clone GitHub - Bt…

Rust语言的Hello, World! 程序解析

Rust是一门现代系统编程语言&#xff0c;注重内存安全和并发性。让我们从一个经典的 “Hello, World!” 程序开始&#xff0c;逐步解析它的每个部分。 fn main() {println!("Hello, world!"); }1. fn main() { ... } 在Rust中&#xff0c;程序的执行从 main 函数开…

锂电池的电压和容量怎么计算?

锂电池组是由电池单体&#xff08;电芯&#xff09;通过串并联来组成 1、串联(S)增加电压&#xff0c;容量不变。 例如&#xff1a;1个磷酸铁锂电池的额定电压为3.2V&#xff0c;容量为4000mAH&#xff0c;将10个磷酸铁锂电芯串联&#xff0c;电池组电压&#xff1a;3.2v*10&a…