python之一文秒懂re正则表达式

引言

Python 中的正则表达式是一个强大的工具,用于处理字符串查找、替换、分割等。正则表达式使用特殊语法来表示一系列匹配字符串的字符规则。Python 通过 re 模块提供对正则表达式的支持。

1. 查找

1.re.search(pattern, string[, flags=0])

  • 功能:在字符串中从左到右扫描,寻找第一个匹配正则表达式的子串。
  • 返回值:如果找到匹配项,返回一个Match对象,其中包含有关匹配的信息,如匹配的文本、位置等。如果没有找到匹配项,则返回None
  • 应用场景:当你只需要找到第一个匹配项,并且不关心其他可能的匹配项时,使用search
# search 返回match 或 none
result = re.search(r"abc", "0bcabcdabcde", re.I)  # I 不区分大小写
print(result, result.start(), result.end(), result.group())
#<re.Match object; span=(3, 6), match='abc'> 3 6 abc

2. re.findall(pattern, string[, flags=0])

  • 功能:在字符串中从左到右扫描,寻找所有匹配正则表达式的子串。
  • 返回值:返回一个列表,包含所有匹配的子串。如果没有找到匹配项,则返回空列表。
  • 应用场景:当你需要找到字符串中所有匹配正则表达式的子串时,使用findall
result = re.findall(r"abc", "0bcabcdabcde", re.I)
print(result)
# ['abc', 'abc']

3. re.finditer(pattern, string[, flags=0])

  • 功能:在字符串中从左到右扫描,寻找所有匹配正则表达式的子串,但返回的是一个迭代器。
  • 返回值:返回一个迭代器,迭代器中的每个元素都是一个Match对象,包含有关匹配的信息。如果没有找到匹配项,则迭代器为空。
  • 应用场景:当你需要遍历所有匹配项,并对每个匹配项执行某些操作时(比如获取匹配项的位置或进行复杂的处理),使用finditer
result = re.finditer(r"abc", "0bcabcdabcde")
for data in result:print(data.group())
# abc
# abc

3.替换

1. sub ,返回替换后的字符串

# \w 匹配字母数字下划线
result = re.sub(r"a\wc", "哈哈哈", "0bcabcda2cde")
print(result)
# 0bc哈哈哈d哈哈哈de

2. subn ,元组形式返回替换后的结果和替换次数

# \d 只匹配数字,不关心字符
result = re.subn(r"a\dc", "哈哈哈", "0bca1cdabcde")
print(result)
# ('0bc哈哈哈dabcde', 1)

4. 分割

# split  返回切割后的内容
result = re.split(r"abc", "0bcabcdabcde", maxsplit=1) #设置最大分割次数
print(result)
#['0bc', 'dabcde']

5. 常用指令

1. \w  \W \d  \D  \s  \S

# \w 匹配字母 数字 下划线
# \W 匹配非字母 非数字 非下划线
# \d 匹配数字
# \D 匹配非数字
# \s 匹配空白
# \S 匹配非空白
result1 = re.findall(r"\w","abc123+-*/_") # 打印
result2 = re.findall(r"\W", "abc123+-*/_")
result3 = re.findall(r"\d","abc123+-*/_")
result4 = re.findall(r"\D","abc123+-*/_")
result5 = re.findall(r"\s","abc123+-*/_")
result6 = re.findall(r"\S","abc123+-*/_")
print(result1,result2,result3,result4,result5,result6)# 1打印 ['a', 'b', 'c', '1', '2', '3', '_']
# 2打印 ['+', '-', '*', '/']
# 3打印 ['1', '2', '3']
# 4打印 ['a', 'b', 'c', '+', '-', '*', '/', '_']
# 5打印 []
# 6打印 ['a', 'b', 'c', '1', '2', '3', '+', '-', '*', '/', '_']

 2.  .  ^  $

# . 任意字符 除了\n 除非使用re.M
# ^abc   abcd\nabcd开头不能匹配\n   除非使用re.M
# abc$   以abc 结尾 不能匹配\n 比如:abc\nadc 结果就一个 abc  除非使用re.M
result1 = re.findall(r".","abc\nabc")
result2 = re.findall(r"^abc","abc\nabc",re.M)
result3 = re.findall(r"a\wc$", "abc\nadc", re.M)
print(result1,result2,result3)#result1 打印 ['a', 'b', 'c', 'a', 'b', 'c']
#result2 打印 ['abc', 'abc']
#result3 打印 ['abc', 'adc']

3. *  +  ? 

# *  代表有>=0 个
# +  代表有>=1 个
# ?  代表有0个或1个
result1 = re.findall(r"\d*", "123456789")
result2 = re.findall(r"\d+", "123456789")
result3 = re.findall(r"\d?", "123456789")
print(result1,result2,result3)#result1 打印 ['123456789', '']
#result2 打印 ['123456789']
#result3 打印 ['1', '2', '3', '4', '5', '6', '7', '8', '9', '']

4. {n}  {m,n}  [m-n]  |  ()  

{n}:这个量词用于指定前面的字符或子表达式在匹配时必须恰好出现n次。

print(re.match(r'a{3}', 'aaa').group())  # 输出: aaa  

{m,n}:这个量词用于指定前面的字符或子表达式在匹配时至少出现m次,但不超过n次。如果省略n,则表示至少出现m次,没有上限。 

print(re.findall(r'a{2,4}', 'aaaaa'))  # 输出: ['aaaa', 'a']  

[m-n]:这个字符集(也称为字符类)用于匹配方括号内的任一字符。

# 使用[m-n](注意这里只是示例字符集,并非直接m到n的范围)  
print(re.match(r'[a-z]', 'b').group())  # 输出: b 

|:这个操作符称为“或”操作符,用于匹配两个或多个表达式中的任意一个。示例:a|b 匹配a或b。 示例:(a|b)c 匹配ac或bc。 

# 使用|  
print(re.search(r'a|b', 'cab').group())  # 输出: a  

​​​​():圆括号在正则表达式中有多种用途,但最常见的用途之一是分组。分组可以让我们将表达式的一部分作为一个整体来引用或处理。示例:(abc)* 匹配零个或多个abc。 分组还允许我们通过反向引用(\1, \2...)来引用之前的分组。 示例:(\w+)\s+\1 匹配如 hello hello 这样的重复单词序列(\1引用第一个分组匹配的内容)。

# 使用()  
print(re.findall(r'(\w+)\s+\1', 'hello hello world'))  # 输出: ['hello']

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

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

相关文章

二十二、状态模式

文章目录 1 基本介绍2 案例2.1 Season 接口2.2 Spring 类2.3 Summer 类2.4 Autumn 类2.5 Winter 类2.6 Person 类2.7 Client 类2.8 Client 类的运行结果2.9 总结 3 各角色之间的关系3.1 角色3.1.1 State ( 状态 )3.1.2 ConcreteState ( 具体的状态 )3.1.3 Context ( 上下文 )3.…

Airtest 的使用

Airtest 介绍 Airtest Project 是网易游戏推出的一款自动化测试框架&#xff0c;其项目由以下几个部分构成 Airtest : 一个跨平台的&#xff0c;基于图像识别的 UI 自动化测试框架&#xff0c;适用于游戏和 App &#xff0c; 支持 Windows, Android 和 iOS 平台&#xff0c…

【功能】修改昵称

需求&#xff1a;全中文模式下&#xff0c;最多8个汉字&#xff1b;其它情况最多16个字节 此处引入C#中&#xff0c;中英文在不同文本格式下占用的空间大小 1.ASCII中&#xff0c;一个英文字母&#xff08;不区分大小写&#xff09;&#xff0c;占1个字节&#xff1b;一个汉字…

解决银河麒麟V10登录循环的方法

解决银河麒麟V10登录循环的方法 一&#xff1a;进入命令行二&#xff1a;删除.Xauthority文件三&#xff1a;重启系统 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 在使用银河麒麟桌面操作系统V10时&#xff0c;有时可能会遇到一个令人头…

【题解】—— LeetCode一周小结32

&#x1f31f;欢迎来到 我的博客 —— 探索技术的无限可能&#xff01; &#x1f31f;博客的简介&#xff08;文章目录&#xff09; 【题解】—— 每日一道题目栏 上接&#xff1a;【题解】—— LeetCode一周小结31 5.不含连续1的非负整数 题目链接&#xff1a;600. 不含连续…

jenkins升级踩坑记录

1. 直接用java 1.8版本启动最新版jenkins.war&#xff0c;直接失败 2. 下载java 11启动&#xff0c;依然失败&#xff0c;换成java17版本可以启动&#xff0c;但会报错 解决报错1&#xff1a; java.io.IOException: Failed to load: Parameterized Remote Trigger Plugin (Pa…

redis列表若干记录

2、列表 ziplist ziplist参数 entry结构 entry-data:节点存储的元素prelen&#xff1a;记录前驱节点长度encoding&#xff1a;当前节点编码格式encoding encoding属性 使用多个子节点存储节点元素长度&#xff0c;这种多字节数据存储在计算机内存中或者进行网络传输的时的字节…

小型超声波清洗机哪个品牌好用?小型超声波清洗机排名前四

第一次见识到超声波清洗机的神奇是在几年前&#xff0c;当时我去眼镜店配眼镜。等待的过程中&#xff0c;店员把旧的眼镜拿去清洁了&#xff0c;30秒&#xff0c;我就看到了到小污渍和油污被震出来了&#xff0c;感觉特别神奇。几分钟后&#xff0c;清洁完毕&#xff0c;擦干镜…

3个常用zip压缩包文件打来密码删除方法

ZIP压缩包作为一种广泛使用的文件压缩格式&#xff0c;常常用于节省存储空间或便于文件传输。一般情况下为保护文件数据的安全我们会给zip压缩文件设置密码安全保护&#xff0c;但如果后续不需要密码保护了&#xff0c;如何删除密码呢&#xff1f;下面小编给大家介绍三种常用的…

java 函数接口Consumer简介与示例【函数式编程】【Stream】

Java 8 中的 消费者接口Consumer 是一个函数接口&#xff0c;它可以接受一个泛型 类型参数&#xff0c;它属于java.util.function包。 accept(T) 方法&#xff1a;是 Consumer 函数式接口的方法&#xff0c;传入单个输入参数&#xff0c;无返回值&#xff0c;可以用于 Lambda 表…

电脑监控软件有哪些,哪款更好用?一网打尽!电脑监控软件大搜罗,总有一款适合你!

甲&#xff1a;哎&#xff0c;您听说了吗&#xff1f;这年头&#xff0c;电脑监控软件那是五花八门&#xff0c;跟变戏法似的&#xff01; 乙&#xff1a;哦&#xff1f;怎么个五花八门法&#xff1f; 甲&#xff1a;嘿&#xff0c;您还别说&#xff0c;从实时监控到网络追踪…

最佳实践:敏捷需求管理——如何写好用户故事丨IDCF

丁仿&#xff0c;圣略咨询首席敏捷教练&#xff0c;研发效能&#xff08;DevOps&#xff09;工程师&#xff08;中级&#xff09;课程学员 在敏捷项目管理中&#xff0c;用户故事&#xff08;User Stories&#xff09;是需求管理的核心工具。本篇文章将从用户故事的基本概念、编…

一个手机到手机之间通话经过了哪些设备

来源&#xff1a;https://www.bilibili.com/video/BV1ic411F7mM/?spm_id_from333.880.my_history.page.click&vd_source6c5d3cd50fc7fa8732bdfb760a055839 一个手机通话需要经过下面三个网络 类别接入网&#xff08;Access Network&#xff09;承载网&#xff08;Transp…

复习之 java 锁

裁员在家&#xff0c;没有面试机会&#xff0c;整理整理面试知识点吧&#xff01; 不得不知道的java 锁 Java 中&#xff0c;提供了两种方式来实现同步互斥访问&#xff08;也就是锁&#xff09;&#xff1a;synchronized 和 Lock 多线程编程中&#xff0c;有可能会出现多个线…

PCB工艺

表面处理 提高焊接质量&#xff1a;提高焊接点的质量&#xff0c;确保电路板的可靠性和寿命。防止氧化&#xff1a;保护裸露的铜箔不受氧化&#xff0c;延长电路板的使用寿命。提高导电性&#xff1a;某些表面处理方法可以提高电路板的导电性&#xff0c;适用于高频和高速电路…

期权中非常重要的行权!不懂行权先别交易!

今天带你了解期权中非常重要的行权&#xff01;不懂行权先别交易&#xff01;期权是金融市场中一种常见的衍生品工具&#xff0c;它给予持有者在特定时间内以特定价格购买或出售某个资产的权利。而“行权”是指期权持有者行使期权权利的行为。 期权行权是指期权持有者选择执行…

【区块链+金融服务】甘肃股权交易中心企业金融服务平台 | FISCO BCOS应用案例

甘肃股权交易中心股份有限公司&#xff08;简称“甘肃股交中心”&#xff09;与甘肃征信股份有限公司同属甘肃金控集团控股子公司&#xff0c; 在共同服务本地中小微企业发展中发挥了重要作用。甘肃股交中心目前使用深圳证券通信有限公司研发的区域股权综合金融服务平台&#x…

超网和无类间路由是什么?

​一、超网概述 超网是将多个连续的网络地址组合成一个增加的网络地址的技术。常用于减少路由器的路由表大小&#xff0c;网络的可扩展性。通过合并连续的子网&#xff0c;超网可以减少路由入侵的数量&#xff0c;从而提高网络的效率。 超网的实现基于合并多个具有连续IP地址…

java知识点详解——异常

当输入的数不是整数时 会报错 当输入的被除数为0时 会报错 在以前我们会使用if—else语句用来堵住漏洞&#xff0c;但是那样相当繁琐&#xff0c;很难穷举所有错误 Scanner in new Scanner(System.in); System.out.print("请输入被除数:"); int num1 in.nextInt(…

JVM感知docker容器内存资源限制

容器中的java程序无法感知docker的内存资源限制 [rootxm-phy-kvm-113-2 ~]# docker run -m 100MB openjdk:8u131 java -XshowSettings:vm -version VM settings:Max. Heap Size (Estimated): 17.43GErgonomics Machine Class: serverUsing VM: OpenJDK 64-Bit Server VMopenjd…