当前位置: 首页 > 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…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用&#xff0c;可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器&#xff0c;能够帮助开发者更好地管理复杂的依赖关系&#xff0c;而 GraphQL 则是一种用于 API 的查询语言&#xff0c;能够提…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...