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

python正则表达式

python正则表达式

作者:AOAIYI
创作不易,如果觉得文章不错或能帮到你学习,记得点赞收藏评论一下哦


文章目录

  • python正则表达式
  • 一、实验目的
  • 二、实验原理
  • 三、实验环境
  • 四、实验内容
  • 五、实验步骤
  • 总结


一、实验目的

学会使用常见的正则表达式

二、实验原理

一、 正则表达式基础

1.1.概念介绍

正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。

其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。

它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。

下图展示了使用正则表达式进行匹配的流程:
在这里插入图片描述

1.2. 数量词的贪婪模式与非贪婪模式

正则表达式通常用于在文本中查找匹配的字符串。

贪婪模式,总是尝试匹配尽可能多的字符;

非贪婪模式则相反,总是尝试匹配尽可能少的字符。

Python里数量词默认是贪婪的。

例如:正则表达式"ab*“如果用于查找"abbbc”,将找到"abbb"。

而如果使用非贪婪的数量词"ab*?“,将找到"a”。

1.3. 反斜杠的问题

与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。

假如你需要匹配文本中的字符"“,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\\":

第一个和第三个用于在编程语言里将第二个和第四个转义成反斜杠,

转换成两个反斜杠\后再在正则表达式里转义成一个反斜杠用来匹配反斜杠\。

这样显然是非常麻烦的。

Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\"表示。

同样,匹配一个数字的"\d"可以写成r"\d"。
在这里插入图片描述

三、实验环境

Python 3.6.1以上

PyCharm

四、实验内容

掌握常用的正则表达式是爬虫的基础,练习常用的正则表达式。

五、实验步骤

1.在python中有个re包,它是专门用来做正则表达式的,使用时应先import添加re包。在正则表达式中最常用的是".“和”“,”.“代表匹配任意字符,”“代表匹配0或多次前面出现的字符。
举例,现在有数据abcde,我们使用”."来匹配中间的bcd三个字母。

import re  data = 'abcde'  
reg = 'a...e'  
out = re.findall(reg,data)  
print(out)  

在这里插入图片描述
可以在下面看到输出了abcde,说明成功用三个".“代替了bcd,那么当中间字符不止是三个而是更多时,就不能简单的重复”.“了,我们应该使用”*"。

例如:使用".*“来表示0或无限次的”.",修改代码为:

import re  data = 'abcde'  
reg = 'a.*e'  
out = re.findall(reg,data)  
print(out)  

在这里插入图片描述
输出与上次的结果相同,证明匹配成功。
注意:"+“与”“的功能相同,区别在于”“可以匹配到0次,也就是说匹配的字符可以不出现,而”+"匹配的字符最少要出现一次。

2."^“和”$"分别代表匹配字符串起始部分和匹配字符串终止部分。
例如:我们定义的规则是匹配出以h开头的字符串。

import re  data = 'hadoopandspark'  
reg = '^h.*'  
out = re.findall(reg,data)  
print(out)  

在这里插入图片描述
可以看到我们将开头为h的"hadoopandspark"匹配出来了,如果我们匹配其他开头字母,那么该字符串将不会匹配出来。

例如:我们定义规则为匹配以a开头的字符串,则不会返回结果。

import re  
data = 'hadoopandspark'  
reg = '^a.*'  
out = re.findall(reg,data)  
print(out) 

在这里插入图片描述

3.同理的,"$"的用法是匹配终止字符

例如:我们匹配以k结尾的字符串,将会匹配出"hadoopandspark",如果改为匹配其他字母,则不会返回结果

import re  
data = 'hadoopandspark'  
reg = '.*k$'  
out = re.findall(reg,data)  
print(out)  

在这里插入图片描述

4."?“也是正则表达式中的一个常用符号,它有两种用法,一是表示”?"前的字符出现0次或1次。

例如:北京某地的电话号为010-99999999,定义区号和后面号码之间可以存在一个或零个"-“,当”-"多于一个时,将不会返回结果。

import re  data = '010-99999999'  
data1 = '01099999999'  
data2 = '010--99999999'  reg = '^010-?\d{8}$'  out = re.findall(reg,data)  
out1 = re.findall(reg,data1)  
out2 = re.findall(reg,data2)  
print(out)  
print(out1)  
print(out2)  

在这里插入图片描述

第二种用法是它表示非贪婪模式,贪婪模式是指只要有符合条件的字符就全部匹配出来,它将匹配出所有q,非贪婪模式是指只要匹配到一个符合要求的字符就停止,不再继续贪婪更多的q。

import re  data = 'qqqqqqqaabbaccc'  
reg = '^q+'  
reg1 = '^q+?'  
out = re.findall(reg,data)  
out1 = re.findall(reg1,data)  
print(out)  
print(out1)  

在这里插入图片描述

5.{N}和{N,M}的用法,{N}代表匹配N次前面出现的字符,{N,M}代表匹配N~M次前面出现的字符。

例如:reg代表匹配两次q,reg1代表匹配2次以上的q,reg2代表匹配2次以上,5次以下的q。

import re  
data = 'qqqqqqqaabbacccqq'  reg = '^q{2}'  
reg1 = '^q{2,}'  
reg2 = '^q{2,5}'  out = re.findall(reg,data)  
out1 = re.findall(reg1,data)  
out2 = re.findall(reg2,data)  print(out)  
print(out1)  
print(out2)

在这里插入图片描述

6."|“代表匹配”|“左边或右边的字符,”|"两边只要有一边成立就可以匹配出来。

例如:"|“左边匹配以010-开头的前6位字符,”|"右边匹配以9结尾的后4位字符。

import re  
data = '010-99999999'  
reg = '^010-.{2}|.{3}9$'  
out = re.findall(reg,data)  
print(out)  

在这里插入图片描述
注意:"|"的左右两侧,如果左侧匹配失败则匹配右侧,如果右侧匹配失败则匹配左侧。

7."[ ]"表示匹配来自字符集的任意单一字符。

例如:[136 139 182 158],[ ]内包含四个电话号码的前三位,在数据中只要满足这四个电话号码中的任意一个,就可以匹配出来。

import re  
data = '13611112222'  
data1 = '15833334444'  reg = '[136 139 182 158].*'  
out = re.findall(reg,data)  
out1 = re.findall(reg,data1)  print(out)  
print(out1)  

在这里插入图片描述

8."[^] "表示不匹配 [^]中的内容。

例如:我们定义的规则是匹配出以1开头,第二位为3、5、8,第三位任意,第四位不能为1的电话号码。

import re  
data = '13611112222,15833334444,18255556666'  reg = '1[3 5 8].[^1]{8}'  
out = re.findall(reg,data)  print(out)  

在这里插入图片描述

9.\s表示匹配任何空白字符,\S表示匹配任何非空白字符。

例如,\s将匹配出三个空格,\S将匹配出其他非空白字符。

import re  
data = 'abc 123 ABC -'  reg = '\s'  
reg1 = '\S'  out = re.findall(reg,data)  
out1 = re.findall(reg1,data)  print(out)  
print(out1)  

在这里插入图片描述

10.\w表示匹配任何字母数字字符,\W匹配任何非字母数字字符。

例如:\w匹配出了字母和数字,\W略过了非字母和数字,匹配出了空格和符号。

import re  
data = 'abc 123 ABC - + *'  reg = '\w'  
reg1 = '\W'  out = re.findall(reg,data)  
out1 = re.findall(reg1,data)  print(out)  
print(out1)  

在这里插入图片描述

11.\d表示匹配任何十进制数,\D表示匹配任何非数字字符。

例如:\d匹配出了123,\D略过了123,匹配出了字母,空格和符号。

import re  
data = 'abc 123 ABC - + *'  reg = '\d'  
reg1 = '\D'  out = re.findall(reg,data)  
out1 = re.findall(reg1,data)  print(out)  
print(out1)  

在这里插入图片描述


总结

以上就是本文要讲的内容,本文介绍了正则表达式的使用,正则表达式是用于处理字符串的强大工具,它并不是Python的一部分。
其他编程语言中也有正则表达式的概念,区别只在于不同的编程语言实现支持的语法数量不同。
它拥有自己独特的语法以及一个独立的处理引擎,在提供了正则表达式的语言里,正则表达式的语法都是一样的。

相关文章:

python正则表达式

python正则表达式 作者:AOAIYI 创作不易,如果觉得文章不错或能帮到你学习,记得点赞收藏评论一下哦 文章目录python正则表达式一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤总结一、实验目的 学会使用常见的正则表达式 二、…...

【C++】二叉树的非递归遍历

非递归遍历二叉树一、二叉树的前序遍历二、二叉树的中序遍历三、二叉树的后序遍历3.1 方法一3.2 方法二一、二叉树的前序遍历 题目链接 我们可以把任何一棵树看成左路节点,左路节点和右子树。先访问左路节点,再访问左路节点的右子树。在右子树中也重复这…...

Linux——线程同步(条件变量、POSIX信号量)和线程池

一.线程同步(一).概念线程同步是一种多线程关系,指的是线程之间按照特定顺序访问临界资源,进而能够避免线程饥饿问题。所谓线程饥饿指的是某个线程长期“霸占”临界资源,导致其他线程无法访问该资源。而通过线程同步机…...

leaflet 上传CSV文件,导出geojson格式文件(064)

第064个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+leaflet中加载CSV文件,将图形显示在地图上。点击导出geojson,下载成geojson文件。 直接复制下面的 vue+openlayers源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共114行)安装插件…...

Java内部类

文章目录一、内部类的概念二、内部类的分析三、内部类的分类1. 成员内部类2. 静态内部类3. 局部内部类4. 匿名内部类匿名内部类与Lambda表达式一、内部类的概念 在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。内部类…...

Centos系统里运行java的jar包

目前使用springboot开发是嵌入方式的tomcat,不需要单独使用tomcat,那么经常在服务器上运行jar包,这里记录一下在centos7系统里运行jar的方式。在运行之前需要确定centos7系统是否安装了java环境以及配置环境变量,还有jar需要运行的…...

招标采购流程的电子招标采购,是管理复杂供应链和多层供应商的高效方式。

负载均衡(Load Balance) 由于目前现有网络的各个核心部分随着业务量的提高,访问量和数据流量的快速增长,其处理能力和计算强度也相应地增大,使得单一的服务器设备根本无法承担。在此情况下,如果扔掉现有设…...

【C语言】C程序结构和基本语法

1、C语言程序结构 我们学习一门编程语言&#xff0c;第一个实例都是"hello world!"&#xff0c;下面看一个最简单的C程序结构。 #include <stdio.h>int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }程序的第一行 #incl…...

YOLOv8 目标检测 | 自定义数据集

本文介绍了使用用于目标检测的自定义数据训练 YOLOv8 模型。我正在使用来自 kaggle 的 yolo 格式的“Face Mask Dataset”&#xff0c;数据集链接如下&#xff1a;https://www.kaggle.com/datasets/maalialharbi/face-mask-dataset?resourcedownloadYOLOv8 是目前最先进的 YOL…...

Lua语法入门

注意&#xff1a;文章将持续更新完善 文章目录一. 初识Lua二. HelloWorld三. Lua的数据类型四. 变量五. 循环六. 函数七. 条件控制一. 初识Lua Lua 是一种轻量小巧的脚本语言&#xff0c;用标准C语言编写并以源代码形式开放&#xff0c; 其设计目的是为了嵌入应用程序中&#…...

华为OD机试真题JAVA实现【最小步骤数】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(JAVA)真题目录汇总华为OD机试(Python)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出解题思路...

预检请求OPTIONS

这里写目录标题简单请求和非简单请求简单请求非简单请求预检请求OPTIONS简单请求和非简单请求 浏览器将请求分为两大类&#xff1a;简单请求&#xff08;simple request&#xff09;和非简单请求&#xff08;not-so-simple request&#xff09; 简单请求 简单请求&#xff0…...

引入短信服务发送手机验证码进行安全校验

其他方案>引入QQ邮箱发送验证码进行安全校验 相对短信验证码&#xff0c;操作更简单而且免费 最近想给自己的项目在注册时加点安全校验&#xff0c;准备使用免费的邮箱验证来着&#xff0c;在上一篇引入QQ邮箱进行安全校验时&#xff0c;看有朋友说阿里云会送一些短信服务免…...

opencv绘制直线

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…...

Seata源码学习(五)- Seata服务端(TC)源码解读

Seata源码分析- Seata服务端&#xff08;TC&#xff09;源码解读 上节课我们已经分析到了SQL语句最终的执行器&#xff0c;但是再往下分析之前&#xff0c;我们需要先来分析一下TM客户端与TC端通讯以后&#xff0c;TC端的具体操作 服务端表解释 我们的Seata服务端在应用的时…...

低版本jQuery导致XSS Nuclei FUZZ POC

目录 1.前言 2. Nuclei FUZZ jQuery XSS POC 3.漏洞验证 4.修复建议 1.前言 我记得以前用那些漏扫工具时时常会报一个低版本jQuery的安全问题,当时还不会验证。直到有一天,它托梦给我。我悟了。低版本jQuery导致XSS POC文件文末获取。...

【Linux】进程的描述组织与进程状态

文章目录&#x1f3aa; 进程的描述组织&#x1f680;1.什么是进程&#x1f680;2.进程的形成&#x1f680;3.进程标识符 *⭐3.1 PS命令查看PID⭐3.2 /proc目录查看进程属性&#x1f680;4.父子进程⭐4.1 系统调用获取PID⭐4.2 fork创建子进程⭐4.3 fork双返回值问题⭐4.4 写时拷…...

8.2.1.1 WHERE 子句优化

本节讨论可用于处理 WHERE 子句的优化。示例使用 SELECT 语句&#xff0c;但相同的优化适用于 DELETE 和 UPDATE 语句中的 WHERE 子句。 注意 因为 MySQL 优化器的工作正在进行&#xff0c;所以这里并没有记录 MySQL 执行的所有优化。 您可能会尝试重写查询以使算术运算更快&am…...

拆个微波炉,分析一下电路

微波炉是用2450MHz的超高频电磁波来加热食品&#xff0c;它能无损穿越塑料&#xff0c;陶瓷&#xff0c;不能穿越金属&#xff0c;碰到金属会反射&#xff0c;但穿过含水食物&#xff0c;食物内的分子会高速摩擦&#xff0c;产生热量&#xff0c;使食物变熟。在厨房电器中&…...

DM8:DMDSC共享存储集群搭建-共享存储绑定

DM8:DMDSC共享存储集群搭建-共享存储绑定环境介绍&#xff1a;1 发现共享磁盘2 对共享存储进行分区格式化2.1 格式化成功但不可用2.2 解决问题修改错误的分区格式3 配置/etc/rc.d/rc.local3.1 编辑文件&#xff08;两个节点配置相同&#xff09;3.2 使rc.local生效4 重启操作系…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合

在汽车智能化的汹涌浪潮中&#xff0c;车辆不再仅仅是传统的交通工具&#xff0c;而是逐步演变为高度智能的移动终端。这一转变的核心支撑&#xff0c;来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒&#xff08;T-Box&#xff09;方案&#xff1a;NXP S32K146 与…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

Monorepo架构: Nx Cloud 扩展能力与缓存加速

借助 Nx Cloud 实现项目协同与加速构建 1 &#xff09; 缓存工作原理分析 在了解了本地缓存和远程缓存之后&#xff0c;我们来探究缓存是如何工作的。以计算文件的哈希串为例&#xff0c;若后续运行任务时文件哈希串未变&#xff0c;系统会直接使用对应的输出和制品文件。 2 …...

claude3.7高阶玩法,生成系统架构图,国内直接使用

文章目录 零、前言一、操作指南操作指导 二、提示词模板三、实战图书管理系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 在线考试系统通过4o模型生成系统描述通过claude3.7生成系统架构图svg代码转换成图片 四、感受 零、前言 现在很多AI大模型可以…...