python之正则表达式

目录

正则表达式

python正则表达式方法 

match

search

findall

finditer

compile

元字符匹配

元字符

量词

贪婪匹配和惰性匹配

正则表达式的group

语法

案例 

正则表达式

  • 正则表达式又称规则表达式,是使用单个字符串来描述、匹配某个句法规则的字符串,常被用来检索、替换那些符合某个模式的文本
  • 正则表达式就是使用元字符进行排列组合用来匹配字符串,并通过规则去验证字符串是否匹配
  • python正则表达式,使用re模块,并基于re模块的三个基础方法来做正则匹配(match、search、findall)

python正则表达式方法 

使用时先导入re模块:import re

match

语法:变量=re.match(匹配规则,被匹配的字符串)

注意:从被匹配的开头进行匹配,匹配成功则返回匹配对象,匹配不成功则返回None

取得下标:变量.span()

取得匹配字符串:变量.group()

#导入re模块
import re
s="python language"
result=re.match("python",s)
print(result)#<re.Match object; span=(0, 6), match='python'>
print(result.span())#匹配的下标
print(result.group())#匹配的字符串

语法:变量=re.search(匹配规则,被匹配的字符串)

作用:搜索整个字符串,找出匹配的,从前向后,找到第一个后就停止不会继续向后,整个字符串都找不到,就返回None

取得下标:变量.span()

取得匹配字符串:变量.group()

#导入re模块
import re
s="i like python very much python yyds"
result=re.search("python",s)
print(result)#<re.Match object; span=(7, 13), match='python'>
print(result.span())
print(result.group())

findall

语法:列表对象=re.findall(匹配规则,被匹配的字符串)

作用:匹配整个字符串,找出全部匹配项,找不到则返回list:[]

#导入re模块
import re
s="i like python very much python yyds"
result=re.findall("python",s)
print(result)#['python', 'python']

finditer

语法:列表对象=re.findall(匹配规则,被匹配的字符串) 

作用:匹配字符串中的所有内容,返回的是迭代器。

import re
result=re.finditer(r"\d+","我的电话号码是10086,女朋友电话号码是10010")
print(result)#<callable_iterator object at 0x0000029E66A093C0>
for i in result:print(i.group())
# 10086
# 10010

注意:

  • 字符串r标记表示当前字符串是原始字符串,即内部的转义字符无效而是普通字符
  • 从迭代器中拿到内容需要i.group()

compile

前言:正则表达式可能会被写的很长,此时复杂的正则可能有需要反复的使用,此时就可以把该正则提前加载好,后面用的时候直接拿来用就能够提高一点点效率

语法:预加载正则表达式=re.compile(r"需要编译的正则表达式")

import re
#预加载正则表达式
obj=re.compile(r"\d+")#很复杂的正则表达式
result=obj.findall("我的电话号码是10086,女朋友电话号码是10010")
print(result)#['10086', '10010']

元字符匹配

元字符

含义:具有固定含义的特殊符号

字符功能
.(点)匹配任意一个字符(除了\n),\.匹配自身
[]匹配[]中列举任意一个字符
[^……]匹配除了字符组中的所有字符
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格、tab键
\S匹配非空白
\w匹配大小写英文字母数字及下划线(单词字符)
\W匹配非单词字符
\n匹配一个换行符
\t匹配一个制表符
^匹配字符串开头
$匹配字符串结尾
|匹配左右任意1个表达式
()匹配括号里的内容

注意:元字符仅能匹配单个字符 

量词

含义:控制前面元字符出现的次数

量词功能
*匹配前一个规则字符重复出现了0到无数次
+匹配前一个规则字符重复出现了1到无数次
?匹配前一个规则字符重复出现了0或1次
{m}匹配前一个规则字符重复出现了m次
{m,}匹配前一个规则字符重复出现了m到无数次
{m,n}匹配前一个规则字符重复出现了m到n次

贪婪匹配和惰性匹配

匹配方式功能
.*(贪婪匹配)尽可能多的匹配字符
.*?(惰性匹配)尽可能少的匹配字符

举例:玩吃鸡游戏,晚上一起上游戏,干嘛呢?打游戏啊

  • 玩.*游戏:玩吃鸡游戏,晚上一起上游戏,干嘛呢?打游戏
  • 玩.*?游戏: 玩吃鸡游戏

正则表达式的group

语法

给匹配到的分组正则命名:(?P<名字>正则表达式)

获取对应分组匹配的内容:match对象.group("名字")

案例 

import re
s="""<div class='a'><span id='1'>周杰伦</span></dir><div class='b'><span id='2'>郭麒麟</span></dir><div class='c'><span id='3'>周星驰</span></dir><div class='d'><span id='4'>刘德华</span></dir>
"""
obj=re.compile(r"<div class='(?P<ch>.*?)'><span id='(?P<num>\d+)'>(?P<name>.*?)</span></dir>",re.S)
#注意这里的re.S代表让.也可以匹配换行符
result=obj.finditer(s)
for i in result:print(i.group("name"))# 周杰伦 郭麒麟 周星驰 刘德华

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

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

相关文章

[代码案例]学会python读写各类文件的操作(excel,txt,mat)

简介 python读写三类文件 excel文件 txt文件 mat文件 代码 """Description: python 读写各类文件 操作 """ import scipy as scipy from scipy.io import loadmat import xlwt import xlrd 读写excel文件workbook xlrd.open_workbook(test1.…

密码攻击与ADSelfService Plus的保护

密码攻击是当前网络安全面临的严峻挑战之一。黑客通过不断演进的技术手段&#xff0c;试图入侵用户账户&#xff0c;窃取敏感信息&#xff0c;从而对个人和组织造成严重损害。为了应对密码攻击的威胁&#xff0c;ManageEngine推出了ADSelfService Plus&#xff0c;这是一款功能…

【剑指 Offer 32】从上到下打印二叉树 II

题目&#xff1a; 从上到下按层打印二叉树&#xff0c;同一层的节点按从左到右的顺序打印&#xff0c;每一层打印到一行。 例如:给定二叉树: [3,9,20,null,null,15,7]3/ \9 20/ \15 7返回其层次遍历结果&#xff1a; [[3],[9,20],[15,7] ]思考&#xff1a; 题目要求从上到…

流程图如何制作?5步快速画出好看的流程图!

流程图是一种图形化工具&#xff0c;描述某个过程或者操作的步骤&#xff0c;以及某种业务系统的具体流程。流程图通常由各种图形符号、形状、箭头组成&#xff0c;可以清晰的表示出流程或系统中各种步骤、每个环节之间的关系、条件判断、数据的流动和处理过程等。 在线流程图软…

【LeetCode每日一题】——85.最大矩形

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 困难 三【题目编号】 85.最大矩形 四【题目描述】 给定一个仅包含 0 …

excel 计算 分位值

_XLFN.QUARTILE.EXC(Result 1!G:G,2) 和 PERCENTILE 都可以用来计算一组数据的分位数&#xff0c;但是它们的计算方式略有不同。 _XLFN.QUARTILE.EXC(Result 1!G:G,2) 是 Excel 中的一个函数&#xff0c;在计算一个数据集的四分位数时使用。其中&#xff0c;第一个参数 Result…

P1144 最短路计数

最短路计数 题目描述 给出一个 N N N 个顶点 M M M 条边的无向无权图&#xff0c;顶点编号为 1 ∼ N 1\sim N 1∼N。问从顶点 1 1 1 开始&#xff0c;到其他每个点的最短路有几条。 输入格式 第一行包含 2 2 2 个正整数 N , M N,M N,M&#xff0c;为图的顶点数与边数…

【基础类】—三栏页面布局的方案和优缺点

一、假设高度已知&#xff0c;中间宽度自适应&#xff0c;三栏&#xff08;列&#xff09;布局的方案有哪些&#xff1f; float浮动、absolute绝对定位、flex弹性盒子、table表格布局、grid网格布局 浮动 float <style>* {margin: 0;padding: 0;}.container {width: 1…

内网穿透-————SSH远程连接树莓派

前言 文章目录 前言内网穿透实现公网SSH远程连接树莓派1. 在树莓派上安装[cpolar客户端](https://www.cpolar.com/)2. 在树莓派浏览器中输入本地9200端口3. 在公共互联网的电脑的命令行界面输入命令 内网穿透实现公网SSH远程连接树莓派 随着科技的进步和信息技术的发展&#x…

异步javaScript

在本文中&#xff0c;我们将解释什么是异步编程&#xff0c;为什么我们需要它&#xff0c;并简要讨论 JavaScript 历史上异步函数是怎样被实现的。 预备知识&#xff1a;基本的计算机素养&#xff0c;以及对 JavaScript 基础知识的一定了解&#xff0c;包括函数和事件处理程序…

20天学会rust(三)没有object的rust怎么面向对象?

面向对象我们都很熟悉&#xff0c;可以说它是一种软件开发最重要的编程范式之一&#xff0c;它将程序中的数据和操作数据的方法组织成对象。面向对象有几个重要特性&#xff1a; 封装、继承和多态&#xff0c;基于这些特性带来了在可重用性、可维护性、扩展性、可靠性的优点。 …

浅析pom文件标签功能

问题&#xff1a; 对maven项目的pom文件结构和标签不是很清晰 学习笔记&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project><parent><!-- 父项目信息 --></parent><!-- 声明项目描述符遵循哪一个POM模型版…

自然语言处理从入门到应用——LangChain:记忆(Memory)-[基础知识]

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 默认情况下&#xff0c;链&#xff08;Chains&#xff09;和代理&#xff08;Agents&#xff09;是无状态的&#xff0c;这意味着它们将每个传入的查询视为独立的&#xff08;底层的LLM和聊天模型也是如此&#xff09;…

用Rust实现23种设计模式之原型模式

在 Rust 中&#xff0c;原型模式可以通过实现 Clone trait 来实现。原型模式是一种创建型设计模式&#xff0c;它允许通过复制现有对象来创建新对象&#xff0c;而无需显式地使用构造函数。下面是一个使用 Rust 实现原型模式的示例&#xff0c;带有详细的代码注释和说明&#x…

shell 入门练习小记

一、hello world #!/bin/bash echo "Hello World !"#! 为约定的标记&#xff0c;告诉系统这个脚本需要什么解释器执行&#xff0c;后接绝对路径 /bin/bash 表示期望 bash去解析并运行shell echo用于向窗口输出文本 chmod x ./test.sh #给脚本赋执行权限 ./test.sh …

Centos7克隆快速复制多台虚拟机|互通互联

背景&#xff1a;有时候&#xff0c;我们在用虚拟机的时候会用到多个进行使用。重新安装会花费大量的时间&#xff0c;此时&#xff0c;我们可以通过vmware虚拟机自带的功能快速克隆出完全相同的系统。 前提&#xff1a;被克隆的虚拟机系统要处于关闭状态 步骤&#xff1a;…

Android入门教程||Android 架构||Android 应用程序组件

Android 架构 Android 操作系统是一个软件组件的栈&#xff0c;在架构图中它大致可以分为五个部分和四个主要层。 Linux内核 在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能&#xff0c;比如进程管理&#xff0c;内存管理&#xff0c;设…

ChatGPT FAQ指南

问:chatgpt 国内不开放注册吗? OpenAI不允许大陆和香港用户注册访问 openai可以的,chatGPT不行 以下国家IP不支持使用 中国(包含港澳台) 俄罗斯 乌克兰 阿富汗 白俄罗斯 委内瑞拉 伊朗 埃及 问:ChatGPT和GPT-3什么关系? GPT-3是OpenAI推出的AI大语言模型 ChatGPT是在G…

spring eurake中使用IP注册

在开发spring cloud的时候遇到一个很奇葩的问题&#xff0c;就是服务向spring eureka中注册实例的时候使用的是机器名&#xff0c;然后出现localhost、xxx.xx等这样的内容&#xff0c;如下图&#xff1a; eureka.instance.perferIpAddresstrue 我不知道这朋友用的什么spring c…

H263压缩码流如何分解为一个一个单元并查询到其宽高?

H263码流尺寸规格有限&#xff0c;只有以下几种&#xff1a; H263码流有四个分层&#xff1a; 1、图像层 2、块组 3、宏块 4、块 下面分别介绍&#xff1a; 具体介绍如下&#xff0c;5.1.3中红色框选部分就是压缩码流的宽高指示&#xff1a; 图像层 上面就是H263的图像层&am…