Python 常用模块re

【一】正则表达式

【1】说明

  • 正则表达式是一种强大的文本匹配和处理工具,主要用于字符串的模式匹配搜索替换
  • 正则表达式测试网址:正则表达式在线测试
  • 正则表达式手册:正则表达式手册

【2】字符组

  • 字符转使用[]表示,并在方括号内列出允许匹配的字符
  • 字符组中的字符之间的顺序没有特定意义,他们是等效的
  • 匹配字符组其中的任意一个字符
(1)常用字符组
正则–字符组说明
[aeiou]匹配任意一个小写元音字母
[0123456789]匹配任意一个数字
[0-9]匹配任意一个数字
[a-z]匹配任意一个小写字母
[a-zA-Z]匹配任意一个字母
[0-9a-zA-Z]匹配任意一个字母或者数字

【3】元字符

  • 正则表达式中的元字符是具有特殊含义的字符,它们不仅仅匹配自身,还具有一些特殊的功能
(1)常用元字符
正则–元字符说明
·匹配任意一个除换行符(\n)以外的字符
要匹配包括“\n”在内的任何字符,请使用像“`(.
\w匹配任意一个字母、数字或下划线
[A-Za-z0-9_]
\W匹配任意一个非字母、数字或下划线
[^A-Za-z0-9_]
\s匹配一个空白符(包括空格、制表符、换页符等)
[ \f\n\r\t\v]
\S匹配一个非空白符(包括空格、制表符、换页符等)
[^ \f\n\r\t\v]
\d匹配任意一个数字
[0-9]
\D匹配任意一个非数字
[^0-9]
\t匹配一个制表符
[\t]
\b匹配一个单词的结尾
py\b可以匹配main.py的结尾py,但是不能匹配pythonpy
a|b匹配字符a字符b
()匹配括号内的表达式,也表示一个组
[…]匹配字符组中的字符
[^…]匹配除了字符组中字符的所有字符

【4】量词

  • 正则表达式中的量词用于指定一个模式中某个元素的匹配次数
(1)常用量词
正则–量词说明
*重复零次或更多次
+重复一次或更多次
?重复零次一次
{n}重复n
{n,}重复n次或更多次, 贪婪匹配优先匹配多次
{n,m}重复n次m次,贪婪匹配优先匹配m次

【5】位置

  • 正则表达式中的量词用于指定一个模式中某个元素的位置
(1)常用位置
正则–量词位置说明
^匹配字符串的开始
$匹配字符串的结尾

【6】分组匹配

  • 在正则表达式中,分组是用小括号 () 括起来的部分,它允许你将一组字符当作一个单独的单元来处理

  • 例如 (abc){2,4} 表示匹配连续出现 2 到 4 次的 abc

【7】转义符

  • 在正则表达式中,转义字符用于取消字符的特殊含义,使其变成普通字符
  • 例如:在正则表达式中,. 表示匹配任意字符。如果你想匹配实际的点号,需要使用 \.

【8】模式修正符

  • 正则表达式的模式修正符是一种在正则表达式模式中添加修正标志以改变匹配规则的方式。修正标志通常以字母形式添加到正则表达式的末尾,用于调整匹配的方式
说明
re.I是匹配对大小写不敏感
re.L做本地化识别匹配
re.M多行匹配,影响到^和$
re.S使.匹配包括换行符在内的所有字符
re.U根据Unicode字符集解析字符,影响\w、\W、\b、\B
re.X通过给予我们功能灵活的格式以便更好的理解正则表达式

【二】re模块

【1】编译正则表达式compile

  • 正则表达式编译之后会生成一个正则表达式对象,该对象可以被访问多次
  • 避免了在每次匹配时都重新解析正则表达式
re.compile(pattern, flags=0)# pattern 	正则表达式
# flags		用于指定匹配模式修正符
import repattern = re.compile(r"\d")
print(pattern, type(pattern))
# re.compile('\\d') <class 're.Pattern'>

【2】查找结果findall

  • 所有满足匹配结果的内容,返回一个列表
  • 避免了在每次匹配时都重新解析正则表达式
re.findall(pattern, string, flags=0)# pattern 	正则表达式
# string 	待匹配字符串
# flags		用于指定匹配模式修正符
import repattern = re.compile(r"\w+")
text = "my name is bruce"
res = re.findall(pattern, text)
print(res)
# ['my', 'name', 'is', 'bruce']
注意:存在子组时
  • 将只返回子组内容

  • 需要使用非捕获分组(?:...)

import repattern = re.compile(r"\d+@(qq|163).com")
text = "15846354@qq.com"
res = re.findall(pattern, text)
print(res)
# ['qq']pattern = re.compile(r"\d+@(?:qq|163).com")
text = "15846354@qq.com"
res = re.findall(pattern, text)
print(res)
# ['15846354@qq.com']

【3】查找结果search

  • 搜索第一个第一个第一个匹配成功的对象
  • 返回一个对象为空则返回None
  • 不像findall一样存在子组的问题
re.search(pattern, string, flags=0)# pattern 	正则表达式
# string 	待匹配字符串
# flags		用于指定匹配模式修正符
注意:匹配对象的方法和属性
group()		# 匹配的结果字符串
start()		# 匹配成功的起始位置,从0开始
end()		# 匹配成功的结束位置,结束的后一个位置 
span()		# 元组形式,开始和结束位置
import repattern = re.compile(r"\d+")
text = "age is 18"
res = re.search(pattern, text)
print(res, type(res))                   # <re.Match object; span=(7, 9), match='18'> <class 're.Match'>
print(res.group())                      # 18
print(res.start())                      # 7
print(res.end())                        # 9
print(res.span(), type(res.span()))     # (7, 9) <class 'tuple'>

【3】查找结果match

  • match和search基本相同
  • 不同点:
    • match从字符串开头位置开始匹配
    • search在整个字符串中搜索第一个匹配结果
import repattern1 = re.compile(r"\w+")
pattern2 = re.compile(r"\d+")
text = "age is 18"
res = re.match(pattern1, text)
print(res)                      # <re.Match object; span=(0, 3), match='age'>
res = re.match(pattern2, text)
print(res)                      # None

【4】切割split

  • 用于根据正则表达式模式分割字符串
  • 返回一个由分割后的子字符串组成的列表
re.split(pattern, string, maxsplit=0, flags=0)# pattern 	正则表达式
# string 	待匹配字符串
# maxsplit  指定最大分割次数,0表示不限制,从前往后开始切分
# flags		用于指定匹配模式修正符
import repattern = re.compile(r"\d+")
text = "aafa121ada021da12da"
res = re.split(pattern, text)
print(res)  # ['aafa', 'ada', 'da', 'da']
res = re.split(pattern, text, maxsplit=1)
print(res)  # ['aafa', 'ada021da12da']
注意:存在子组时
  • 子组的内容也将保留在列表中

  • 使用非捕获分组(?:...),将不会保存在列表中

import repattern = re.compile(r"(qq|163)")
text = "15846354@qq.com"
res = re.split(pattern, text)
print(res)
# ['15846354@', 'qq', '.com']pattern = re.compile(r"(?:qq|163)")
text = "15846354@qq.com"
res = re.split(pattern, text)
print(res)
# ['15846354@', '.com']

【5】替换sub

  • 在字符串中替换正则表达式模式的匹配项, 默认替换
re.sub(pattern, repl, string, count=0, flags=0)# pattern 	正则表达式
# repl  	替换匹配项的字符串或可调用对象
# string 	待匹配字符串
# count  	指定最大替换次数,0表示不限制,从前往后开始替换
# flags		用于指定匹配模式修正符
import repattern = re.compile(r"\d+")
text = "age is 18"
res = re.sub(pattern, "20", text)
print(res)
# age is 20
了解:repl是可调用对象
  • 将只返回子组内容

  • 需要使用非捕获分组(?:...)

import redef to_upper(match):return match.group().upper()
text = "apple banana cherry date"
pattern = re.compile(r'\b\w{6}\b')  # 匹配长度为6的单词
result = pattern.sub(to_upper, text)
print(result)	# apple BANANA cherry datedef replace_adjacent(match):word = match.group()return f"{word} {word.upper()}"
text = "apple banana cherry date"
pattern = re.compile(r'\b\w{6}\b')  # 匹配长度为6的单词
result = pattern.sub(replace_adjacent, text)
print(result) 	# apple apple BANANA cherry date

【6】替换subn

  • sub和subn基本相同
  • 不同点:
    • sub返回替换后的字符串
    • sunb返回一个包含替换后的字符串和替换次数的元组
import repattern = re.compile(r"\d+")
text = "age is 18, money 50"
res = re.subn(pattern, "20", text)
print(res)
# ('age is 20, money 20', 2)

【7】切割finditer

  • 用于在字符串中查找正则表达式模式的所有匹配项
  • 返回一个迭代器
re.finditer(pattern, string, flags=0)# pattern 	正则表达式
# string 	待匹配字符串
# flags		用于指定匹配模式修正符
import repattern = re.compile(r"\d+")
text = "age is 18, money 50"
res = re.finditer(pattern, text)
print(res, type(res))
for i in res:print(i)
# <callable_iterator object at 0x000002A4EC860D90> <class 'callable_iterator'>
# <re.Match object; span=(7, 9), match='18'>
# <re.Match object; span=(17, 19), match='50'>

【三】常用正则表达式

匹配内容正则表达式
邮箱地址^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
URL`^(https?
匹配日期(年-月-日)^\d{4}-\d{2}-\d{2}$
匹配手机号码^1[3456789]\d{9}$
匹配身份证号码^\d{17}[\dXx]
IP 地址`/((2[0-4]\d
匹配整数或浮点数^[-+]?[0-9]*\.?[0-9]+$
Unicode编码中的汉字范围/^[\u2E80-\u9FFF]+$/

【四】练习

  • 获取金额,最小两位小数
import redef get_money():while True:money = input("请输入金额(最小单位0.01):>>>").strip()pattern = re.compile(r"^\d+(\.\d{1,2})?$")res = re.match(pattern, money)if not res:print(f"输入内容{money}不合法,请输入")continuereturn moneyprint(get_money())

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

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

相关文章

音视频转码

音视频转码是指&#xff1a; 容器中音视频数据编码方式转换&#xff0c;如由H.264编码转成mpeg-4编码&#xff0c;mp3转成AAC&#xff1b;音视频码率的转换&#xff0c;如4Mb视频码率降为2Mb&#xff0c;视频分辨率的转换&#xff0c;如1080P转换为720P&#xff0c;音频重采样…

13_16-Go语言中的流程控制

**Go **语言中的流程控制 主讲教师&#xff1a;&#xff08;大地&#xff09; 合作网站&#xff1a;www.itying.com** **&#xff08;IT 营&#xff09; 我的专栏&#xff1a;https://www.itying.com/category-79-b0.html 1、Golang 中的流程控制 :::tips 流程控制是每种编…

银河麒麟桌面操作系统V10,gcc编译c程序报错:fatal error: stdio.h: 没有那个文件或目录

一、问题描述 Kylin-Desktop-V10-SP1-HWE-Release-2303-X86_64系统&#xff0c;&#xff0c;gcc编译c程序报错&#xff1a;fatal error: stdio.h: 没有那个文件或目录&#xff0c;如下&#xff1a; msms-pc:~/work/program/test$ gcc test.c test.c:1:10: fatal error: stdi…

ospf学习纪要

1、为避免区域&#xff08;area0,area1等&#xff09;间的路由形成环路&#xff0c;非骨干区域之间不允许直接相互发布区域间的路由。因此&#xff0c;所有的ABR&#xff08;Area Border Router,区域边界路由器&#xff09;都至少有一个借口属于Area0,所以Area0始终包含所有的A…

Exynos4412 移植Linux-6.1(九)移植tiny4412_backlight驱动的过程及问题解决

系列文章目录 Exynos4412 移植Linux-6.1&#xff08;一&#xff09;下载、配置、编译Linux-6.1 Exynos4412 移植Linux-6.1&#xff08;二&#xff09;SD卡驱动——解决无法挂载SD卡的根文件系统 Exynos4412 移植Linux-6.1&#xff08;三&#xff09;SD卡驱动——解决mmc0: Ti…

使用GBASE南大通用负载均衡连接池

若要使用负载均衡连接池功能&#xff0c;需要在连接串中配置相关的关键字。有关更详细的关键字信息在 GBASE南大通用 连接参数表‛中介绍。假设存在如下场景&#xff1a;  现有集群中存在 4 个节点&#xff1a; 192.168.9.173, 192.168.9.174, 192.168.9.175, 192.168.9.17…

部署后显示Bad Request The referrer header is missing.

HTTP Referer是header的一部分&#xff0c;当浏览器向web服务器发送请求的时候&#xff0c;一般会带上Referer&#xff0c;告诉服务器该网页是从哪个页面链接过来的&#xff0c;服务器因此可以获得一些信息用于处理。 因为当时需要去复制CSDN的MK格式&#xff0c;所以在HTML的头…

基于STM32单片机模拟智能电梯步进电机控制升降毕业设计3

STM32单片机模拟智能电梯步进电机控制数码管显示3 演示视频&#xff08;复制到浏览器打开&#xff09;&#xff1a; 基于STM32单片机的智能电梯控制系统模拟智能电梯步进电机控制系统设计数码管显示楼层设计/DIY开发板套件3 产品功能描述&#xff1a; 本系统由STM32F103C8T6单…

【华为机试】2023年真题B卷(python)-代表团坐车

一、题目 题目描述&#xff1a; 某组织举行会议&#xff0c;来了多个代表团同时到达&#xff0c;接待处只有一辆汽车&#xff0c;可以同时接待多个代表团&#xff0c;为了提高车辆利用率&#xff0c;请帮接待员计算可以坐满车的接待方案&#xff0c;输出方案数量。 约束: 1.一个…

龙芯loongarch64服务器编译安装tensorflow-io-gcs-filesystem

前言 安装TensorFlow的时候,会出现有些包找不到的情况,直接使用pip命令也无法安装,比如tensorflow-io-gcs-filesystem,安装的时候就会报错: 这个包需要自行编译,官方介绍有限,这里我讲解下 编译 准备 拉取源码:https://github.com/tensorflow/io.git 文章中…

关于pygame无法打开对应文件解决办法 pyame.error unable to open file

问题描述&#xff1a; 问题原因&#xff1a; 由于pygame版本过低导致无法进行声音播放&#xff0c;升级对应版本即可完成&#xff01; 解决办法&#xff1a; 升级pygame包版本到2.1.2&#xff0c;即可解决该问题&#xff01; pip install --upgrade pygame2.1.2

C语言之指针

目录 函数的参数 对象和地址 取地址运算符 注意 指针 注意 指针运算符 注意 在C语言中&#xff0c;指针是一个十分重要的概念&#xff0c;它的作用是“指示对象”。 例如&#xff1a;你要去一座公寓楼找一位朋友&#xff0c;公寓楼由很多楼层组成&#xff0c;每个楼层…

十八、本地配置Hive

1、配置MYSQL mysql> alter user rootlocalhost identified by Yang3135989009; Query OK, 0 rows affected (0.00 sec)mysql> grant all on *.* to root%; Query OK, 0 rows affected (0.00 sec)mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)2、…

GO设计模式——18、迭代器模式(行为型)

目录 迭代器模式&#xff08;Iterator Pattern&#xff09; 迭代器模式的核心角色&#xff1a; 优缺点 使用场景 代码实现 迭代器模式&#xff08;Iterator Pattern&#xff09; 迭代器模式&#xff08;Iterator Pattern&#xff09;提供了一种统一的方式来访问一个容器对…

P1614 爱与愁的心痛

P1614 爱与愁的心痛 [P1614 爱与愁的心痛](https://www.luogu.com.cn/problem/P1614?contestId150480 P1614 爱与愁的心痛 题意 最近有 n 个不爽的事&#xff0c;每句话都有一个正整数刺痛值&#xff08;心理承受力极差&#xff09;。想知道连续 m 个刺痛值的和的最小值是多…

打造高效接口测试:专栏介绍

在软件开发过程中&#xff0c;接口测试是非常重要的一环。它可以帮助我们确保系统的各个模块之间的交互是否正常&#xff0c;从而提高软件的质量和稳定性。本文将介绍如何使用Python编写一个自动化接口测试框架&#xff0c;包括框架对比、接口测试框架介绍、接口测试框架流程和…

原理图中VCC、VDD、VEE、VSS、VBAT各表示什么意思

一、名词解析 &#xff08;1&#xff09;VCC&#xff1a;Ccircuit 表示电路的意思, 即接入电路的电压 &#xff08;2&#xff09;VDD&#xff1a;Ddevice 表示器件的意思, 即器件内部的工作电压; &#xff08;3&#xff09;VSS&#xff1a;Sseries 表示公共连接的意思&#…

使用html+css+js+three.js写圣诞树

实现效果&#xff1a; <head><meta charset"UTF-8"><title>Musical Christmas Lights</title><link rel"stylesheet" href"https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"><sty…

网络编程:多进程和多线程编程

1. 多进程编程 1.1 fork #include <sys/types.h> #include <unistd.h> // 调用失败返回 -1 设置 errno pid_t fork( void );子进程返回 0&#xff0c;父进程返回子进程 PID&#xff1b; 信号位图被清除&#xff08;父进程的信号处理函数不再对新进程起作用&…

【网络编程】网络通信基础——简述TCP/IP协议

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目录 一、ip地…