【python】正则表达式-快速信息匹配,过滤与检测

前言

菜某的总结,希望能够帮到大家。

正则表达式的概念

简单来说就是匹配信息,创建一个规则,匹配文本中符合这个规则的内容

作用领域

单单看他的概念可能觉得他的用途也就是查找,实际上他的用途很广泛

1.信息筛选,过滤不符合规则的内容

2.输入信息验证,匹配用户输入的信息

3.匹配文本中的内容位置

4.辅助爬虫,去爬符合条件的网站,而不是指定具体的网站

常用方法

正则表达式需要使用re库。

函数描述
complie()编译正则表达式
escape()正则符号转义处理
findall()匹配正则符号,以列表形式返回
finditer()匹配正则符号,以迭代形式返回
match()从头开始匹配
purge()清除缓存中的正则表达式
search()在任意位置上进行匹配(只找一个)
split()按照给定匹配符号拆分字符串
sub()正则匹配替换
subn()

正则匹配替换并返回替换结果

案例在下方配合字符使用

字符

正则表达式实际上就是匹配对应的字符,只不过这个字符分为两种

普通字符:顾名思义就是匹配要匹配的那个字

元字符:是符合相应规则的字。

常见元字符:. * + ? \ | { } [ ] ( )

+代表匹配重复出现的内容

?会生成一个列表,满足条件为匹配内容,不满足为空(一个字符一个字符的匹配)

*会生成一个列表,跟?一样,不同的是如果有重复相邻的会作为一个元素

.代表任意字符

{}代表匹配重复的类字符个数

[]指定匹配的内容

|类似于or,后面跟另一个表达式他也会匹配另一个

()分组,把匹配内容进行分组

\数字,规定本组的内容跟第几组的内容一样

某一类别字符:

标识符描述
\b匹配开始或结束位置的空字符
\B匹配不在开头结尾的空字符
\d匹配数字
\D匹配非数字
\s匹配空格
\S匹配非空格
\w匹配字母
\W匹配非字符

可以观察到基本上小写是匹配这一类,大写是匹配不是这一类。

位置匹配符

^规定匹配在文本开头的相应字符

$规定匹配在末本尾的相应字符

\A等价于^

\Z等价于$

\b单词边界

\B非单词边界

。。(?=...)匹配出现在...之前的。。

。。(?!...)匹配不是在...之前的。。

(?<=...)。。匹配出现在...之后的。。

(?<!...)。。匹配不在...之后的。。

其他特殊功能

我从网上找的别人整理的图。

普通字符匹配

案例:

我们可以看到他已经匹配到了相应的字符。

这里findall里的r代表的是把一些转义字符当做普通字符用

某一类别字符匹配与

找数字类字符

找空格类字符

元字符的应用

+字符的应用

+代表了匹配规定字符出现了一次或者多次

这里第一个匹配是匹配连续的数字,第二个匹配是匹配连续的5

?字符的应用

?字符代表的是匹配字符出现0,1。其实就是单个字单个字的匹配。不符合规定的就会返回空字符

 

可以看到这个?是单个字符匹配,匹配到符合的就显示出来,不符合就是空字符

*字符的应用

*的作用与?相类似,不过他会找出重复的作为一个元素,而?是单个字符单个字符的匹配

这里的15和555已经被当做了一个元素放到了列表中。

[ ]的用法

[ ]是用来规定匹配范围的。

[1-5]就代表了匹配其中含有1-5之间的数字的内容

[你好啊]就代表匹配其中含有这三个字之一的内容

[a-zA-Z]就代表匹配所有的字母

{ }的用法

{ }的作用是规定匹配的数量

一些用法举例

\d{1,4}匹配一个或者4个连在一起的数字

\d{,4}匹配小于等于四个的数字

\d{3,}匹配大于等于三个的数字

注意,0个也是小于三个

|符号的用法

|符号前后连接两个表达式,他匹配到任意一个就会记录下来。

这里寻找15或者555,就是既匹配前面的,又匹配后面的。

\与()的用法

先用()进行分组,然后用\规定与哪一组相同

位置匹配符的使用

^与$的使用

^代表只能匹配开头的hello

$代表只匹配句子末尾的hello

 当然如果^放到了[]里面的话就代表了取反的意思

例如[^a-z]就是匹配不是a-z的字符

\b与\B的使用

\b代表匹配字符在单词的前面

\B代表匹配的字符在单词的中间

\b写在前面代表匹配字符需要在单词前方,在后面代表匹配字符需要再单词后方

(?)的使用方法

re模块的方法的使用

查找功能

查找功能有四个

search只返回一个

match从头开始匹配

findall列表形式返回所有

finditer迭代形式返回

值得注意的是,这里的查找功能除了findall是返回列表之外,其他的都是返回一个对象。

先来个案例看一下他们返回的形式

他们返回的就不是列表了

输出他们匹配的内容

输出是需要用到一个group()的,但是他还有一些更高级的用法。

我们可以对匹配的字符进行分组,然后通过在group中添加参数进行规定输出什么内容

 

 以元组的形式返回内容

返回的内容就是元组了

文本替换功能

文本替换功能常用这两个函数

sub()返回被替换后的内容

subn()以元组形式返回替换后的内容和替换的个数

结果如下

 文本分割功能

文本分割通常使用

split()函数

作用就是根据分割的符号,把分割出来的内容以列表的形式表现出来。

这种是排除法,去除不要的,留下要的,之前的是找出要的。

模式设定

 其实在re的参数中还有一个规定模式的参数可以添加,基本上用的最多的是I,可以忽略大小写进行匹配。

其他的模式在上面总结了。

实战案例

校验用户输入合法案例

利用正则表达判断用户是否攻击我方网站(写的简陋能被绕过。。水平有限)

 提取文本中的重要信息

使用起来十分的爽呢

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

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

相关文章

TortoiseSVN·文件锁定与清理

安装 TortoiseSVN 的时候&#xff0c;选择 svn 命令可用, 选择 will be intalled on local hard drive 。 在锁定的文件夹内 cmd 进入终端&#xff0c;输入 find . -type f -name ".svn/lock" -exec rm -f {} \; 删除所有锁定文件。进行清理操作&#xff1a;svn clea…

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】

二、Java中SpringBoot组件集成接入【MySQL和MybatisPlus】 1.MySQL和MybatisPlus简介2.maven依赖3.配置1.在application.yaml配置中加入mysql配置2.新增Mybatis-Plus配置类 4.参考文章 1.MySQL和MybatisPlus简介 MySQL是一种开源的关系型数据库管理系统&#xff0c;被广泛应用…

像专家一样使用TypeScript条件类型

掌握TypeScript的条件类型&#xff0c;了解TypeScript内置的实用类型是如何工作的。 您是否使用过Exclude、Extract、NonNullable、Parameters和ReturnType实用程序类型? 你知道他们内部是怎么运作的吗? 事实上&#xff0c;上述TypeScript内置的实用程序类型都是基于条件类型…

爬虫网易易盾滑块及轨迹算法案例:某乎

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、滑块初步分析 js运行 atob(‘aHR0cHM6Ly93d3cuemhpaHUuY29tL3NpZ25pbg’) 拿到网址&#xff0c;浏览器打开网站&#xff0…

IP风险画像:源头防范网络攻击的全面策略

在当今数字化的时代&#xff0c;网络攻击呈现多样化和复杂化的趋势&#xff0c;为了确保网络的安全&#xff0c;制定全面的IP风险画像并从源头防范网络攻击是至关重要的。ip数据云将探讨如何通过建立IP风险画像来识别和应对潜在的威胁&#xff0c;从而实现更加安全可靠的网络环…

系统存储架构升级分享

一、业务背景 系统业务功能&#xff1a;系统内部进行数据处理及整合, 对外部系统提供结果数据的初始化(写)及查询数据结果服务。 系统网络架构: • 部署架构对切量上线的影响 - 内部管理系统上线对其他系统的读业务无影响 •分布式缓存可进行单独扩容, 与存储及查询功能升级…

使用numpy处理图片——滤镜

大纲 3维数组切分打平重组法深度切分法 3维数组堆叠 我们在用手机拍照片时&#xff0c;往往会对照片进行滤镜处理&#xff0c;从而让照片更加美观。本文我们将实现几种滤镜效果——去除所有像素中的某一种原色&#xff0c;形成只有红绿、红蓝和绿蓝原色的照片。 为了突出色彩丰…

[算法与数据结构][c++]:Static关键字和全局变量

Static关键字和全局变量 1. 生命周期、作用域和初始化时机2. 全局变量3. Static 关键字3.1 面向过程3.1.1 静态全局变量3.1.2 静态局部变量&#xff08;单例中会使用&#xff09;3.1.3 静态函数 3.2 面向对象3.2.1 类内静态成员变量3.2.2 类内静态成员函数 Reference 写在前面&…

Leetcode2980. 检查按位或是否存在尾随零

Every day a Leetcode 题目来源&#xff1a;2980. 检查按位或是否存在尾随零 解法1&#xff1a;遍历 给你一个 正整数数组 nums 。 你需要检查是否可以从数组中选出两个或更多元素&#xff0c;满足这些元素的按位或运算&#xff08; OR&#xff09;结果的二进制表示中至少存…

如何给AVR16芯片解锁

AVRM16核心板本身集成了强大的芯片自解锁功能模块&#xff0c;当由于熔丝位设置错误&#xff0c;导致芯片锁死&#xff0c;无法正常使用时候&#xff0c;可以利用畅学AVR16核心板上的解锁功能给芯片解锁。 &#xff08;如果芯片没有锁死&#xff0c;可以跳过此步骤&#xff09…

鸿蒙Harmony--状态管理器--@Prop详解

纵横千里独行客&#xff0c;何惧前路雨潇潇。夜半浊酒慰寂寞&#xff0c;天明走马入红尘。且将新火试新茶&#xff0c;诗酒趁年华。青春以末&#xff0c;壮志照旧&#xff0c;生活以悟&#xff0c;前路未明。时间善变&#xff0c;可执着翻不了篇。时光磨我少年心&#xff0c;却…

STM32蓝牙小车、红外循迹小车、超声波避障小车项目设计

一、前言 本文旨在分享我学习STM32的过程中&#xff0c;为了强化学习成果&#xff0c;试着制作一些实训项目。最开始做的就是STM32蓝牙小车、STM32红外循迹小车、STM32超声波避障小车。 相信看完本文的你&#xff0c;一定可以亲手制作一辆属于自己的智能小车&#xff01; 注&am…