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

python“r e 模块“常见函数详解

正则表达式:

英文Regular Expression,是计算机科学的一个重要概念,她使用一种数学算法来解决计算机程序中的文本检索,匹配等问题,正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持,re模块就是我们python中关于正则表达式的第三方模块,它可以帮我们解决下面的问题:

检索:通过正则表达式,从字符串中获取我们想要的部分、匹配:判断给定的字符串是否符合正则表达式的过滤逻辑

很多语言都有正则表达式比如:Java javascript python php c c++........等等。

re模块中有很多函数?

re.compile()
re.match()
re.findall()
re.search()
re.sub()
re.split()

首先给大家讲一下这些函数的用法:

1.re.comiple(pattern,flags=0)

将常用的正则表达式编译成为一个正则表达式对象,函数本身并不具备特殊意义,需要搭配findall(), search(), match()等常用函数一起使用。

其中第一个参数 “pattern“为正则表达式,第二个参数“flags”编译标志位,用于扩展匹配字符的功能

import re
pattern = re.compile('^He\w+\s(\w+)\s\w+.(\w)+',re.S)
cont = '''Hello chaoxingerya World_This
is 12 345 6789 '''
value = pattern.match(cont)
print(value.group(1))

其中第一个参数为:'^He\w+\s(\w+)\s\w+.+(\w)+' 正则表达匹配式

符号:“^”表示从什么开始,题目中是以“He”开始,符号“\w”表示匹配大写英文字母,数字、下划线即:“a-zA-Z0-9_”,符号“+”表示 匹配前一个字符至少1次到n次,这两个字符组合在题目中用来表示:“llo”,符号“\s”表示匹配空格 也就是tab键,在题目中用来匹配“Hello“和 “chaoxingerya“之间的空格键,符号“(\w+)“,是由小括号“()”和“\+”组成,符号“()”的作用是将“()“中的字符作为⼀个分组,在后期可以通过value.group(1)将第一个分组中的内容“chaoxingerya”拿出来,符号“\s“用来匹配题目中“chaoxingerya”和 World_This之间的空格,\w+用来匹配"World_This",

符号点“ . ”用来匹配

'''Hello chaoxingerya World_This

is 12 345 6789 '''

之间的换行,符号“(\w)+“,用来匹配题目中“is”,其中剩余的数字我并没有对它进行匹配,如果没

第二个参数为:re.S 功能标志位,扩展正则字符的匹配

S :表示 . (点符号)在正则表达式中包括换行符在内的任意字符,也就是所有字符

  1. re.match(pattern,string)

pattern :匹配正则语法,可以单独写也可以有re.compile()编译的对象得来。

string 需要被匹配的字符串

并且与group搭配使用

总是从被匹配对象的第一个字符开始,如果匹配你到了第一个字符则继续往下匹配,如果第一个字符没有匹配得到则会报错

为了给大家讲清楚我直接搞了csdn一片文章的博客链接方便大家爬虫学习

import re
cont = '<a data-report-query="spm=1000.2115.3001.5927" data-report-click="{&quot;spm&quot;:&quot;1000.2115.3001.5927&quot;,&quot;dest&quot;:&quot;https://csdnnews.blog.csdn.net/article/details/129187745&quot;,&quot;extra&quot;:&quot;{\&quot;fId\&quot;:558,\&quot;fName\&quot;:\&quot;floor-www-index\&quot;,\&quot;compName\&quot;:\&quot;www-swiper\&quot;,\&quot;compDataId\&quot;:\&quot;www-headhot\&quot;,\&quot;fTitle\&quot;:\&quot;\&quot;,\&quot;pageId\&quot;:141}&quot;}" target="_blank" href="https://csdnnews.blog.csdn.net/article/details/129187745?spm=1000.2115.3001.5927" class="title" data-v-0045335f="">Linus 怒怼:请不要提交垃圾!</a>'
ret = re.match("^<a.*?([a-z]+://[a-z./0-9]+\?).*?>",cont)
print(ret.group(1))

我将这篇文章的链接所在的标签给你拿出来

<a data-report-query="spm=1000.2115.3001.5927" data-report-click="{&quot;spm&quot;:&quot;1000.2115.3001.5927&quot;,&quot;dest&quot;:&quot;https://csdnnews.blog.csdn.net/article/details/129187745&quot;,&quot;extra&quot;:&quot;{\&quot;fId\&quot;:558,\&quot;fName\&quot;:\&quot;floor-www-index\&quot;,\&quot;compName\&quot;:\&quot;www-swiper\&quot;,\&quot;compDataId\&quot;:\&quot;www-headhot\&quot;,\&quot;fTitle\&quot;:\&quot;\&quot;,\&quot;pageId\&quot;:141}&quot;}" target="_blank" href="https://csdnnews.blog.csdn.net/article/details/129187745?spm=1000.2115.3001.5927" class="title" data-v-0045335f="">Linus 怒怼:请不要提交垃圾!</a>

我需要其中在href中的链接地址:

https://csdnnews.blog.csdn.net/article/details/129187745

我写的正则匹配式为:

^<a.*?([a-z]+://[a-z./0-9]+\?).*?>

其中对符号解释如下:

符号:“^”表示从那个地方开始,"^<a" 表示从<a开始,符号“ [a-z]+“[]是定义匹配的字符范围,[a-z],说明要匹配的文本内容的某一位置是a,b,c,d,....., q, y, z的某一区间,在本次为了匹配 https,因为 [a-z]加上了“+”表示匹配多个,如果不加只能匹配一个。符号:“://“为了匹配文本内容的://,为何是这样写的,因为正则中没有什么特殊符号用来表示,:或//,在正则表达式中可以用原来的字符匹配,只要不涉及到正则和普通字符相关联的特殊字符就好,比如 : 符号 "?",正则中符号"?",表示非贪婪模式,至多匹配一个,要是一个也没有也不会报错,在符号识别中它就是普通问号,用在正则匹配表达式中,就必须要加上符号“\”,让符号恢复原意。

3.re.search(pattern,string,flags)

pattern: 正则匹配表达式

string: 被匹配的文本

flags :标志位,扩展字符的效果

作用:re.search会匹配整个字符串,并返回第一个成功的匹配,如果匹配成功则返回结果,匹配失败则返回None,它和re.match()的区别在一个是从字符串首字母匹配文本内容,一个是从任意位置匹配内容。并且re.search会扫描整个被匹配对象,只会返回一个被成功匹配的对象,如果这列被匹配的文本内容中没有符合要求的,则会返回None

re.match从字符串首字母的开始匹配,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到符合正则表达式的文本内容。

案例:

import re
import requests
cont = 'dd44--32ff_88'
ret = re.search("\d+",cont)
print(ret.group())

仅返回了44 为什么没有返回32 我说过了re.search只会返回第一个符合正则表达式匹配的内容,其他no pass。

如果是matchhanshune?

直接pass掉了,为啥呢?我说了,re.match()方法会从被匹配内容首字母开始匹配如果不符合,则直接pass掉,显然 被匹配对象 dd44--32ff_88开始位置是英文单词,所以用\d 以数字匹配显然是不对的。

我通过正确的方式去匹配:

显然可以成功匹配但是并不是我们想要的纯数字内容

  1. re.findall(pattern, string, flags)

pattern : 编译的正则表达式

string :被匹配的文本内容

flags : 扩展字符的特殊功能

re.findall 函数作用 :

在被匹配对象中找到符合正则表达式所编译的所有文本内容,将结果返回为一个列表,如果没有找到匹配的,则返回空列表。特别注意的是 match ()和search() 只会匹配首次遇到且符合结果的文本内容,而 findall()则会匹配所有内容。findall没有group参数

案例测试:

import re
import requests
cont = '我是44--54屌丝77是_bu_是88'
ret = re.findall("[\u4e00-\u9fa5a-z]+",cont)
print(ret)

符号“[\u4e00-\u9fa5]“用来匹配中文字符,为什么后面加了符号“a-z”因为文本内容中还有个“bu“,为什么我还加上符号“+”因为符号“+”,表示匹配多次如果不加则会匹配一个中文字符,加了可以返回多个

三,关于函数中flags : 扩展字符的特殊功能内容及其作用

   flags 标志位参
re.I(re.IGNORECASE) 使匹配对大小写不敏感
re.L(re.LOCAL)  做本地化识别(locale-aware)匹配
re.M(re.MULTILINE)  多行匹配,影响 ^ 和 $
re.S(re.DOTALL) 使 . 匹配包括换行在内的所有字符
re.U(re.UNICODE)根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

正则匹配其实并不是很难,重点是函数太多注意的事项太多,常见及其常用的就是那么几个,在这个函数我认为最常用的的是,re.findall, re.compile,re.sub

有很多我没有写出来不是不重要,我准备在下一篇文章中写出来,近期我会持续更新python面向对象编程,异步编程,python高级进阶,爬虫js逆向技术+app逆向

相关文章:

python“r e 模块“常见函数详解

正则表达式&#xff1a;英文Regular Expression,是计算机科学的一个重要概念&#xff0c;她使用一种数学算法来解决计算机程序中的文本检索&#xff0c;匹配等问题&#xff0c;正则表达式语言是一种专门用于字符串处理的语言。在很多语言中都提供了对它的支持&#xff0c;re模块…...

【数据结构】二叉树的四种遍历方式——必做题

写在前面学完上一篇文章的二叉树的遍历之后&#xff0c;来尝试下面的习题吧开始做题144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;94. 二叉树的中序遍历 - 力扣&#xff08;LeetCode&#xff09;145. 二叉树的后序遍历 - 力扣&#xff08;LeetCode&#xff09…...

Nginx使用“逻辑与”配置origin限制,修复CORS跨域漏洞

目录1.漏洞报告2.漏洞复现3.Nginx 修复3.1 添加请求头3.2 配置origin限制2.3 调整origin限制1.漏洞报告 漏洞名称&#xff1a; CORS 跨域漏洞等级&#xff1a; 中危漏洞证明&#xff1a; Origin从任何域名都可成功访问&#xff0c;未做任何限制。漏洞危害&#xff1a; 因为同源…...

Laravel框架02:路由与控制器

Laravel框架02&#xff1a;路由与控制器一、路由配置文件二、路由参数三、路由别名四、路由群组五、控制器概述六、控制器路由七、接收用户输入一、路由配置文件 以web网页路由文件为例&#xff1a; 默认根路由 路由定义格式Route::请求方式(请求的URL, 匿名函数或控制响应的方…...

【POJ 2418】Hardwood Species 题解(映射)

描述 阔叶树是一种植物群&#xff0c;具有宽阔的叶子&#xff0c;结出果实或坚果&#xff0c;通常在冬天休眠。 美国的温带气候造就了数百种阔叶树种的森林&#xff0c;这些树种具有某些生物特征。例如&#xff0c;虽然橡树、枫树和樱桃都是硬木树&#xff0c;但它们是不同的物…...

React组件之间的通信方式总结(下)

一、写一个时钟 用 react 写一个每秒都可以更新一次的时钟 import React from react import ReactDOM from react-domfunction tick() {let ele <h1>{ new Date().toLocaleTimeString() }</h1>// Objects are not valid as a React child (found: Sun Aug 04 20…...

【RabbitMQ笔记07】消息队列RabbitMQ七种模式之Publisher Confirms发布确认模式

这篇文章&#xff0c;主要接收消息队列RabbitMQ七种模式之Publisher Confirms发布确认模式。 目录 一、消息队列 1.1、发布确认模式 1.2、案例代码 &#xff08;1&#xff09;引入依赖 &#xff08;2&#xff09;编写生产者【消息确认--单条确认】 &#xff08;3&#xf…...

【华为OD机试模拟题】用 C++ 实现 - IPv4 地址转换成整数(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明IPv4 地址转换成整数题目输入输出示例一输入输出说明示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,...

闭包与高阶函数

文中内容均来自于曾探《JavaScript设计模式与开发实践》的学习笔记。闭包作用域变量的作用域&#xff0c;就是指变量的有效范围。局部变量、全局变量。变量的搜索是从内到外而非从外到内的。变量的生命周期对于全局变量莱索&#xff0c;全局变量的生命周期是永久的&#xff0c;…...

人工智能轨道交通行业周刊-第35期(2023.2.20-2.26)

本期关键词&#xff1a;重庆智慧轨道、智能运维主机、标准轨距、地方铁路公报、景深、机器视觉应用 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交通Rai…...

快慢指针判断链表是否有环

快慢指针判断链表是否有环 单链表有可能存在环&#xff0c;有些情况下要判断一个单链表是否有环。数组的有个快慢指针的方法&#xff0c;其实单链表和数组有相似的地方&#xff0c;可以使用快慢指针的方法。具体做法如下&#xff1a; 首先创建两个指针&#xff0c;它们初始时…...

《MongoDB入门教程》第26篇 聚合统计之$max/$min表达式

本文将会介绍两个 MongoDB 表达式&#xff0c;返回一组数据中最大值的 $max 表达式&#xff0c;以及返回一组数据中最小值的 $min 表达式。 $max 表达式 $max 表达式用于返回一组数据中的最大值&#xff0c;语法如下&#xff1a; { $max: <expression> }$max 表达式在…...

FPGA纯verilog解码SDI视频 纯逻辑资源实现 提供2套工程源码和技术支持

目录1、前言2、硬件电路解析SDI摄像头Gv8601a单端转差GTX解串SDI解码VGA时序恢复YUV转RGB图像输出FDMA图像缓存HDMI输出3、工程1详解&#xff1a;无缓存输出4、工程2详解&#xff1a;缓存3帧输出5、上板调试验证并演示6、福利&#xff1a;工程代码的获取1、前言 FPGA实现SDI视…...

JVM篇之垃圾回收

一.如何判断对象可以回收 1.引用计数法 只要一个对象被其他变量所引用&#xff0c;就让它的计数加1&#xff0c;被引用了两次就让它的计数变成2&#xff0c;当这个变量的计数变成0时&#xff0c;就可以被垃圾回收&#xff1b; 弊端&#xff1a;当出现如下图的情况&#xff0…...

尝试用程序计算Π(3.141592653......)

文章目录1. π\piπ2. 用微积分来计算π\piπ2.1 原理2.2 代码2.3 结果2.4 分析1. π\piπ π\piπ的重要性或者地位不用多说&#xff0c;有时候还是很好奇&#xff0c;精确地π\piπ值是怎么计算出来的。研究π\piπ的精确计算应该是很多数学家计算机科学家努力的方向&#xf…...

【异常检测三件套】系列3--时序异常检测综述

写在前面: 异常检测共包含3个内容,从多个方面剖析异常检测方法,本文为第三篇。过往内容请查看以下链接: 【异常检测三件套】系列1--14种异常检测算法https://blog.csdn.net/allein_STR/article/details/128114175?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%…...

关于SAP 错误日志解析

有时候启动或操作sap会出现故障&#xff0c;只是察看sap用户当前目录下的日志文件可能不得要领&#xff0c;此时有必要察看work目录下的一些trace. 以Linux系统为例&#xff0c;其他的也差不多。 instance说明 如下 DVEBMGS?? ABAP Central Instance D?? …...

java:自定义变量加载到系统变量后替换shell模版并执行shell

这里的需求前提是&#xff0c;在项目中进行某些操作前&#xff0c;需要在命令后对shell配置文件的进行修改&#xff08;如ip、port&#xff09;&#xff0c;这个对于用户是不友好的&#xff0c;需要改为用户页面输入ip、port&#xff0c;后台自动去操作修改配置&#xff1b;那么…...

Redis高级删除策略与数据淘汰

第二章&#xff1a;Redis高级 学习目标 目标1&#xff1a;能够说出redis中的数据删除策与略淘汰策略 目标2&#xff1a;能够说出主从复制的概念&#xff0c;工作流程以及场景问题及解决方案 目标3&#xff1a;能够说出哨兵的作用以及工作原理&#xff0c;以及如何启用哨兵 …...

社畜大学生的Python之pandas学习笔记,保姆入门级教学

接上期&#xff0c;上篇介绍了 NumPy&#xff0c;本篇介绍 pandas。 目录 pandas 入门pandas 的数据结构介绍基本功能汇总和计算描述统计处理缺失数据层次化索引 pandas 入门 Pandas 是基于 Numpy 构建的&#xff0c;让以 NumPy 为中心的应用变的更加简单。 Pandas是基于Numpy…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

人机融合智能 | “人智交互”跨学科新领域

本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

基于IDIG-GAN的小样本电机轴承故障诊断

目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) ​梯度归一化(Gradient Normalization)​​ (2) ​判别器梯度间隙正则化(Discriminator Gradient Gap Regularization)​​ (3) ​自注意力机制(Self-Attention)​​ 3. 完整损失函数 二…...

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

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

逻辑回归暴力训练预测金融欺诈

简述 「使用逻辑回归暴力预测金融欺诈&#xff0c;并不断增加特征维度持续测试」的做法&#xff0c;体现了一种逐步建模与迭代验证的实验思路&#xff0c;在金融欺诈检测中非常有价值&#xff0c;本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...