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

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.lryc.cn/news/116041.html

相关文章:

  • 【LeetCode每日一题】——219.存在重复元素II
  • 篇六:适配器模式:让不兼容变兼容
  • 【云原生】Docker-compose中所有模块学习
  • 广义积分练习
  • element-ui树形表格,左边勾选,右边显示选中的数据-功能(如动图)
  • Android数字价格变化的动画效果的简单实现
  • Win10无法投影关闭3D模式
  • FFmpeg 编码详细流程
  • 05如何做微服务架构设计
  • 安卓开发问题记录:需要常量表达式
  • 回归预测 | MATLAB实现基于SVM-RFE-BP支持向量机递归特征消除特征选择算法结合BP神经网络的多输入单输出回归预测
  • 配置root账户ssh免密登录并使用docker-machine构建docker服务
  • 【力扣周赛】第357场周赛
  • 多线程案例(4)-线程池
  • 【数据结构OJ题】轮转数组
  • 现代C++中的从头开始深度学习:【4/8】梯度下降
  • Yolov5缺陷检测/目标检测 Jetson nx部署Triton server
  • MobaXterm 中文乱码, 及pojie
  • java: 程序包sun.misc不存在
  • WSL2Linux 子系统(五)
  • java 企业工程管理系统软件源码 自主研发 工程行业适用 em
  • IPO观察丨困于门店扩张的KK集团,还能讲好增长故事吗?
  • 【iOS】RunLoop
  • 数据包传输方式:单播、多播、广播、组播、泛播
  • WebRTC基础知识
  • 积累常见的有针对性的python面试题---python面试题001
  • 在springboot使用websocket时mapper无法注入
  • 前端加密与解密的几种方式
  • 详解Spring Bean的生命周期
  • 详解Shell 脚本中 “$” 符号的多种用法