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

news2024/9/20 0:57:33

前言

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

正则表达式的概念

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

作用领域

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

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.coloradmin.cn/o/1382070.html

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

相关文章

一、QT的前世今

一、Qt是什么 1、Qt 是一个1991年由奇趣科技开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序&#xff0c;也可用于开发非GUI程序&#xff0c;比如控制台工具和服务。 2、Qt是面向对象的框架&#xff0c;具有面向对象语言的特性&#xff1a;封装、继承、多态。…

电子学会2023年12月青少年软件编程(图形化)等级考试试卷(三级)真题,含答案解析

青少年软件编程(图形化)等级考试试卷(三级) 分数:100 题数:31 一、单选题(共18题,共50分) 1. 运行左图程序,想得到右图中的效果,红色框应填写的数值是?( ) A.

vmware和ubuntu镜像下载地址

这里有vmware16和ubuntu20.0下载 链接&#xff1a;https://pan.baidu.com/s/1i9IC-KnJlrVDbl6SJ5SIKQ?pwdy2dd 提取码&#xff1a;y2dd 链接&#xff1a;https://pan.baidu.com/s/1imqJVD2dLE1TB6jIrq1-Fg?pwd690f 提取码&#xff1a;690f 这个是我本人下的vmware17 密钥可…

超声波眼镜清洗机清洗眼镜会有伤害吗?适合洗眼镜超声波清洗机

眼镜作为日常生活中不可或缺的辅助视力工具&#xff0c;经常需要清洁保养以确保视力清晰和舒适佩戴。随着科技的发展&#xff0c;超声波眼镜清洗机成为越来越受欢迎的清洁方式。然而&#xff0c;很多人可能会担心使用超声波清洗机是否会对眼镜造成损害。但是可以很可以的告诉大…

Vulnhub-Lampiao

一、信息收集 nmap扫描 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.7 (Ubuntu Linux; protocol 2.0) | ssh-hostkey: | 1024 46:b1:99:60:7d:81:69:3c:ae:1f:c7:ff:c3:66:e3:10 (DSA) | 2048 f3:e8:88:f2:2d:d0:b2:54:0b:…

Xtuner大模型微调

Xtuner大模型微调 一、课程笔记 文档链接&#xff1a;https://github.com/InternLM/tutorial/blob/main/xtuner/README.md 视频链接&#xff1a; https://www.bilibili.com/video/BV1yK4y1B75J/ 大模型微调 大模型的训练利用了各类数据&#xff0c;可以说是一个通才&#xff…

基于Matlab/Simulink开发自动驾驶的解决方案

文章目录 处理自动驾驶数据 仿真自动驾驶场景 设计感知算法 设计规划和控制算法 生成代码和部署算法 集成和测试 参考文献 使用 MATLAB/Simulink开发自动驾驶&#xff0c;能够深入建模真实世界的行为、减少车辆测试并验证嵌入式软件的功能&#xff0c;从而推进自动驾驶感…

宝塔面板使用phpMyAdmin 502 Bad Gateway

第一步软件商店安装PHP 第二步设置phpMyAdmin,选择PHP版本 – 解决

【软件测试】学习笔记-不同视角的软件性能与性能指标

本篇文章探讨新的测试主题&#xff1a;性能测试&#xff0c;因为性能测试的专业性很强&#xff0c;所以我会以从0到1的入门者视角&#xff0c;系统性地阐述性能测试的方法以及应用领域&#xff0c;用实例去诠释各种性能指标。 本篇文章站在全局的视角&#xff0c;帮你梳理软件性…

漏洞复现-nginxWebUI runCmd前台远程命令执行漏洞(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

【AIGC】Controlnet:基于扩散模型的文生图的可控性

前言 controlnet可以让stable diffusion的生图变得可控。 文章连接&#xff1a;https://arxiv.org/pdf/2302.05543.pdf 摘要 冻结了stable diffusion的预训练模型并重用它的预训练编码层神经网络结构与零初始化卷积层连接&#xff0c;从零开始逐渐增加参数&#xff0c;并确…

C练习——汉诺塔

题目&#xff1a; 汉诺塔问题是一个经典的问题。汉诺塔&#xff08;Hanoi Tower&#xff09;&#xff0c;又称河内塔&#xff0c;源于印度一个古老传说。 大梵天创造世界的时候做了三根金刚石柱子&#xff0c;在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆…

extern static 在linux 和 qt下差别

从五个点来说 1.p3.h 中 静态定义一个const的int 变量并且赋值 2.p5.h 声明函数test2的定义 3. 直接extern 引用声明 test1() 函数 而不是像p5.h一样 把函数声明写到头文件 在别的.c文件直接包含头文件 第二点和第三点 是引用声明函数的两种用法 4.main函数 中static静态定…

GCC工具源码编译

文章目录 背景一、下载源码二、编译前依赖准备2.1 相关工具依赖2.2 相关lib&#xff08;gmp/ mpfr /mpc&#xff09;依赖2.2.1 lib源码下载2.2.2 lib源码编译 三、编译GCC3.1 编译3.2 链接 四、报错处理 背景 日常可能涉及到系统里自带GCC版本与被编译源码存在不兼容&#xff…

64位ATT汇编语言整数乘法printf输出

multiplyWithPrint.s里边的内容如下 .section .datastringToShow:.ascii "%d\n\0" .global main .section .text main:movq $4,%raxmovq $2,%rdi# mulq 默认带上rax进行乘积&#xff0c;可以省略rax中的乘数&#xff0c;最后积会放到rax里边。mulq %rdi# C语言的pri…

解决MPICH的GPU初始化失败:一次深入探索

今天来分享“MPICH&#xff1a;MPII_Init_thread(222): gpu_init failed”这个问题的解决方式 文章目录 前言问题原因解决方案 前言 如果在安装MPICH的时候没有注意要一些选项&#xff0c;那么当使用mpicxx mpi_send.cpp -o send && mpirun -n 2 ./send进行编译输出的…

如何调整 Windows 11 任务栏位置、对齐方式,及自定义任务栏

更新于&#xff1a;2023-11-22 分类&#xff1a;Windows 阅读(115407) 评论(12) 如果你是 Windows 11 用户中的一员&#xff0c;一定在不断尝试它的新功能。Windows 11 操作系统采用了全新设计的外观&#xff0c;具有重新设计的 Windows 资源管理器、圆润的窗口边缘和默认将应用…

管理软件供应链中网络安全工具蔓延的三种方法

软件开发组织不断发展&#xff0c;团队成长&#xff0c;项目数量增加。技术堆栈发生变化&#xff0c;技术和管理决策变得更加分散。 在这一演变过程中&#xff0c;该组织的 AppSec 工具组合也在不断增长。在动态组织中&#xff0c;这可能会导致“工具蔓延”。庞大的 AppSec 工…

设计模式 代理模式(静态代理 动态代理) 与 Spring Aop源码分析 具体是如何创建Aop代理的

代理模式 代理模式是一种结构型设计模式&#xff0c;它通过创建一个代理对象来控制对真实对象的访问。这种模式可以用于提供额外的功能操作&#xff0c;或者扩展目标对象的功能。 在代理模式中&#xff0c;代理对象与真实对象实现相同的接口&#xff0c;以便在任何地方都可以使…

爬虫补环境jsdom、proxy、Selenium案例:某条

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 一、简介 爬虫逆向补环境的目的是为了模拟正常用户的行为&#xff0c;使爬虫看起来更像是一个真实的用户在浏览网站。这样可以…