【Python】正则表达式及其在Python中的应用

news2024/9/29 23:34:51

【Python】正则表达式及其在Python中的应用

1.正则表达式基本格式

1. 字符匹配

  • 普通字符:直接匹配字符本身,如 a 匹配字符 a
  • 特殊字符:需要转义,如 \. 匹配点号 .

2. 量词

  • \*:匹配前面的字符零次或多次,如 a* 匹配 """a""aa" 等。
  • +:匹配前面的字符一次或多次,如 a+ 匹配 "a""aa" 等。
  • ?:匹配前面的字符零次或一次,如 a? 匹配 """a"
  • {m}:匹配前面的字符恰好 m 次,如 a{3} 匹配 "aaa"
  • {m,n}:匹配前面的字符至少 m 次,至多 n 次,如 a{2,4} 匹配 "aa""aaa""aaaa"

3. 字符集

  • [abc]:匹配方括号内的任意一个字符,如 [abc] 匹配 "a""b""c"
  • [^abc]:匹配不在方括号内的任意一个字符,如 [^abc] 匹配除了 "a""b""c" 之外的任何字符。
  • [a-z]:匹配从 az 的任意一个小写字母。
  • [0-9]:匹配从 09 的任意一个数字。

4. 预定义字符集

  • .:匹配除换行符外的任意单个字符。
  • \d:匹配一个数字,等同于 [0-9]
  • \D:匹配一个非数字,等同于 [^0-9]
  • \w:匹配一个字母、数字或下划线,等同于 [a-zA-Z0-9_]
  • \W:匹配一个非字母、数字或下划线,等同于 [^a-zA-Z0-9_]
  • \s:匹配一个空白字符(包括空格、制表符、换页符等)。
  • \S:匹配一个非空白字符。

5. 边界匹配

  • ^:匹配字符串的开头。
  • $:匹配字符串的结尾。
  • \b:匹配单词边界。
  • \B:匹配非单词边界。

2.re库:正则表达式在Python中的应用

1. re.match(pattern, string)

  • 功能:从字符串的开头开始匹配,如果匹配成功返回一个匹配对象,否则返回 None

  • 示例

    import re
    
    pattern = r'^Hello'
    text = 'Hello, world!'
    match = re.match(pattern, text)
    if match:
        print('Match found:', match.group())
    else:
        print('No match')
    

2. re.search(pattern, string)

  • 功能:在字符串中搜索第一个匹配项,如果找到返回一个匹配对象,否则返回 None

    import re
    
    pattern = r'world'
    text = 'Hello, world!'
    match = re.search(pattern, text)
    if match:
        print('Match found:', match.group())
    else:
        print('No match')
    

3. re.findall(pattern, string)

  • 功能:返回字符串中所有与模式匹配的子串,作为一个列表。

  • 示例

    import re
    
    pattern = r'\d+'
    text = 'There are 123 apples and 456 oranges.'
    matches = re.findall(pattern, text)
    print('Matches found:', matches)
    

!这个是比较常用到的一个方法

比如LeetCode(力扣)的8. 字符串转换整数 (atoi):

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数。

函数 myAtoi(string s) 的算法如下:

  1. **空格:**读入字符串并丢弃无用的前导空格(" "
  2. **符号:**检查下一个字符(假设还未到字符末尾)为 '-' 还是 '+'。如果两者都不存在,则假定结果为正。
  3. **转换:**通过跳过前置零来读取该整数,直到遇到非数字字符或到达字符串的结尾。如果没有读取数字,则结果为0。
  4. **舍入:**如果整数数超过 32 位有符号整数范围 [−231, 231 − 1] ,需要截断这个整数,使其保持在这个范围内。具体来说,小于 −231 的整数应该被舍入为 −231 ,大于 231 − 1 的整数应该被舍入为 231 − 1

返回整数作为最终结果。

示例 1:

**输入:**s = “42”

**输出:**42

**解释:**加粗的字符串为已经读入的字符,插入符号是当前读取的字符。

带下划线线的字符是所读的内容,插入符号是当前读入位置。
第 1 步:"42"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"42"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"42"(读入 "42")
           ^

示例 2:

**输入:**s = " -042"

输出:-42

解释:

第 1 步:"   -042"(读入前导空格,但忽视掉)
            ^
第 2 步:"   -042"(读入 '-' 字符,所以结果应该是负数)
             ^
第 3 步:"   -042"(读入 "042",在结果中忽略前导零)
               ^

示例 3:

**输入:**s = “1337c0d3”

**输出:**1337

解释:

第 1 步:"1337c0d3"(当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"1337c0d3"(当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"1337c0d3"(读入 "1337";由于下一个字符不是一个数字,所以读入停止)
             ^

示例 4:

**输入:**s = “0-1”

**输出:**0

解释:

第 1 步:"0-1" (当前没有读入字符,因为没有前导空格)
         ^
第 2 步:"0-1" (当前没有读入字符,因为这里不存在 '-' 或者 '+')
         ^
第 3 步:"0-1" (读入 "0";由于下一个字符不是一个数字,所以读入停止)
          ^

示例 5:

**输入:**s = “words and 987”

**输出:**0

解释:

读取在第一个非数字字符“w”处停止。

提示:

  • 0 <= s.length <= 200
  • s 由英文字母(大写和小写)、数字(0-9)、' ''+''-''.' 组成

如果类似的题目出现在竞赛中,我们可以用正则表达式来轻松解决

import re
return max(min(int(*re.findall('^[\+\-]?\d+', s.lstrip())), (1<<31)-1), -(1<<31))

不过在平时练习中还是用正常思路来做以达到练习的效果

4. re.sub(pattern, repl, string)

  • 功能:将字符串中所有与模式匹配的子串替换为指定的字符串。

  • 示例

    import re
    
    pattern = r'\d+'
    text = 'There are 123 apples and 456 oranges.'
    result = re.sub(pattern, 'X', text)
    print('Result:', result)
    

5. re.split(pattern, string)

  • 功能:根据模式将字符串分割成一个列表。

  • 示例

    import re
    
    pattern = r'\s+'
    text = 'Hello   world!  How are you?'
    parts = re.split(pattern, text)
    print('Parts:', parts)
    
6. re.compile(pattern)
  • 功能:编译正则表达式,返回一个正则表达式对象,可以用于多次匹配。

  • 示例

    import re
    
    pattern = re.compile(r'\d+')
    text = 'There are 123 apples and 456 oranges.'
    matches = pattern.findall(text)
    print('Matches found:', matches)
    

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。

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

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

相关文章

Springboot中基于注解实现公共字段自动填充

1.使用场景 当我们有大量的表需要管理公共字段&#xff0c;并且希望提高开发效率和确保数据一致性时&#xff0c;使用这种自动填充方式是很有必要的。它可以达到一下作用 统一管理数据库表中的公共字段&#xff1a;如创建时间、修改时间、创建人ID、修改人ID等&#xff0c;这些…

视频剪辑软件哪个好?剪辑更高效用这些

众所周知&#xff0c;视频已经成为我们记录生活、表达自我的重要方式。 无论是制作旅行Vlog&#xff0c;还是剪辑短片分享故事&#xff0c;优秀的视频剪辑软件是让创意变为现实的利器。 那么&#xff0c;如何在众多免费软件中做出明智选择&#xff0c;成为剪辑高手呢&#xf…

通信工程学习:什么是SISO单入单出

SISO&#xff1a;单入单出 SISO&#xff0c;即单输入单输出&#xff08;Single-Input Single-Output&#xff09;系统&#xff0c;也被称为单变量系统。在这种系统中&#xff0c;输入量与输出量各为一个&#xff0c;是控制理论中的一个基本概念。以下是对SISO系统的详细解释&am…

为什么说函数传递参数最好小于四个

有一个说法说是函数传递参数最好不超过四个&#xff0c;原因有一个是参数太多难以维护&#xff0c;另一个重要的原因就是函数传递小于四个参数时候效率会更高&#xff0c;其实这个说法也不全对&#xff0c;在不同的结构下不太一样&#xff0c;也不一定是4 其实那么下面将探究函…

【RocketMQ】消费失败重试与死信消息

&#x1f3af; 导读&#xff1a;本文档详细介绍了RocketMQ中的重试机制与死信消息处理方法。对于生产者而言&#xff0c;文档提供了如何配置重试次数的具体示例&#xff1b;而对于消费者&#xff0c;它解释了默认情况下消息消费失败后的重试策略&#xff0c;并展示了如何通过代…

STM32LL库之printf函数重定向

1. 加入以下代码 int fputc(int ch,FILE *f) {LL_USART_TransmitData8(USART1,ch);while(!LL_USART_IsActiveFlag_TXE(USART1));//需要等待发送完成return(ch); }记得添加 stdio.h 头文件 2. 在MDK中勾选&#xff1a;Use MicroLIB

C++【类和对象】(取地址运算符重载与实现Date类)

文章目录 取地址运算符重载const成员函数取地址运算符重载 Date类的实现Date.hDate.cpp1.检查日期合法性2. 构造函数/赋值运算符重载3.得到某月的天数4. Date类 - 天数的操作4.1 日期 天数4.2 日期 天数4.3 日期 - 天数4.4 日期 - 天数 5. Date的前后置/--5.1 前置5.2 后置5.…

学习鸿蒙HarmongOS(基础一)

最近听到一个朋友在干鸿蒙系统开发&#xff0c;于是我也来看看&#xff0c;我看到的第一感觉和前端TS好像&#xff0c;鸿蒙的是叫ArkTS&#xff0c;于是来看一下视频&#xff0c;学习了一下&#xff0c;我的随手笔记记录一下吧,方便我以后阅读 基本 语句 函数

unity3D雨雪等粒子特效不穿透房屋效果实现

做项目有时候会做天气模拟&#xff0c;模拟雨雪天气等等。但是容易忽略一个问题&#xff0c;就是房屋内不应该下雨或者下雪&#xff0c;这样不就穿帮了嘛。 下面就粒子穿透物体问题做一个demo。 正常下雨下雪在室内的话&#xff0c;你可以看到&#xff0c;粒子是穿透建筑的。…

【C++篇】启航——初识C++(上篇)

目录 引言 一、C的起源和发展史 1.起源 2.C版本更新 二、C在⼯作领域中的应⽤ 三、C入门建议 1.参考文档 2.推荐书籍 四、C的第一个程序 1.C语言写法 2.C写法 五、命名空间 1.为什么要有命名空间 2.定义命名空间 3.主要特点 4.使用示例 六、C输⼊&输出 …

C程序设计——结构化程序设计的三种结构

前面我说过&#xff1a;“结构化编程语言&#xff0c;用语法限制程序员&#xff0c;只能使用顺序、选择、循环三种结构来解决问题。” 接下来&#xff0c;就讲解这三种结构。 顺序结构 前面我讲过&#xff0c;C语言所有的程序&#xff0c;都必须有一个 main 函数&#xff0c…

TCP\IP标准与OSI标准

TCP/IP 模型和 OSI 模型都是用于描述网络体系结构的模型&#xff0c;但它们的设计理念和层次结构有所不同。TCP/IP 模型更注重实际实现&#xff0c;而 OSI 模型更注重抽象和标准化。 1. OSI 模型 (Open Systems Interconnection Model) OSI 模型是一个七层模型&#xff0c;从…

828华为云征文|部署在线论坛网站 Flarum

828华为云征文&#xff5c;部署在线论坛网站 Flarum 一、Flexus云服务器X实例介绍二、Flexus云服务器X实例配置2.1 重置密码2.2 服务器连接2.3 安全组配置2.4 Docker 环境搭建 三、Flexus云服务器X实例部署 Flarum3.1 Flarum 介绍3.2 Flarum 部署3.3 Flarum 使用 四、总结 一、…

针对考研的C语言学习(定制化快速掌握重点2)

1.C语言中字符与字符串的比较方法 在C语言中&#xff0c;单字符可以用进行比较也可以用 > , < ,但是字符串却不能用直接比较&#xff0c;需要用strcmp函数。 strcmp 函数的原型定义在 <string.h> 头文件中&#xff0c;其定义如下&#xff1a; int strcmp(const …

Vue.js组件开发指南

Vue.js组件开发指南 Vue.js 是一个渐进式的 JavaScript 框架&#xff0c;用于构建用户界面。它的核心是基于组件的开发模式。通过将页面分解为多个独立的、可复用的组件&#xff0c;开发者能够更轻松地构建复杂的应用。本文将深入探讨 Vue.js 组件开发的基础知识&#xff0c;并…

基于springoot新能源充电系统的设计与实现

新能源充电系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统新能源充电系统信息管理难度…

国产纯电SUV都在秀,只有Model Y在挨揍

文/王俣祺 导语&#xff1a;如果想知道纯电SUV应该怎么选&#xff0c;一定有人告诉你“无脑选Model Y”&#xff0c;虽说特斯拉确实粉丝多&#xff0c;但这也恰恰证明Model Y一度成为了纯电SUV的标杆。有标杆自然就有挑战者&#xff0c;随着阿维塔07、智己LS6以及乐道L60先后上…

云南省职业院校技能大赛赛项规程(软件测试)

赛项名称&#xff1a;软件测试 英文名称&#xff1a;Software Testing 赛项组别&#xff1a;高等职业教育 赛项编号&#xff1a;GZ034 目录 一、 赛项信息 二、竞赛目标 三、竞赛内容 1、本赛项考查的技术技能和涵盖的职业典型工作任务 2、专业核心能力与职业综合能力…

商标名称注册查询,到底是查询什么!

在商标注册前是需要商标名称注册查询&#xff0c;那这个到底是查询什么&#xff0c;普推知产商标老杨发现&#xff0c;近日国家知产局发布《商标代理委托合同示范文本》征求意见稿&#xff0c;虽然是参考使用不具有强制性&#xff0c;里面对商标名称注册查询描述是申请前商标检…