正则表达式篇

文章目录

  • 1. 导入re模块
  • 2. 正则表达式的基本模式
  • 3. re模块的主要函数和方法
  • 4. 示例

正则表达式(Regular Expression,常简写为regex或regexp)是一种强大的文本处理工具,它使用一种特殊的字符序列来帮助用户检查一个字符串是否与某种模式匹配。Python内置的re模块提供了完整的正则表达式功能。

以下是一个关于Python中正则表达式的详细教程:

1. 导入re模块

首先,你需要导入Python的re模块来使用正则表达式。


import re

2. 正则表达式的基本模式

  • 字符匹配:
    • .:匹配任意字符(除了换行符)
    • [abc]:匹配方括号中的任意一个字符
    • [^abc]:匹配不在方括号中的任意一个字符
    • [a-z]:匹配任意小写字母
    • [A-Z]:匹配任意大写字母
    • [a-zA-Z]:匹配任意字母
    • [0-9]:匹配任意数字
    • \d:匹配任意数字,等同于[0-9]
    • \D:匹配非数字,等同于[^0-9]
    • \w:匹配任意字母、数字或下划线,等同于[a-zA-Z0-9_]
    • \W:匹配非字母、数字或下划线,等同于[^a-zA-Z0-9_]
    • \s:匹配任意空白字符,包括空格、制表符、换页符等
    • \S:匹配非空白字符
  • 数量词:
    • *:匹配前面的子表达式零次或多次
    • +:匹配前面的子表达式一次或多次
    • ?:匹配前面的子表达式零次或一次
    • {n}:匹配前面的子表达式恰好n次
    • {n,}:匹配前面的子表达式至少n次
    • {n,m}:匹配前面的子表达式至少n次,但不超过m次
  • 边界匹配:
    • ^:匹配字符串的开始
    • $:匹配字符串的结束
    • \b:匹配一个单词边界
    • \B:匹配非单词边界
  • 选择、分组和引用:
    • |:或操作,匹配|左右任意一个表达式
    • ():捕获括号,对正则表达式进行分组,并捕获匹配的文本
    • (?:…):非捕获括号,只进行分组,不捕获匹配的文本
    • \n:引用前面第n个捕获括号中匹配的文本(n为正整数)
      转义字符:
    • \:对特殊字符进行转义,使其失去特殊意义

3. re模块的主要函数和方法

  • re.match(pattern, string, flags=0):从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None。
  • re.search(pattern, string, flags=0):扫描整个字符串并返回第一个成功的匹配。
  • re.findall(pattern, string, flags=0):在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
  • re.finditer(pattern, string, flags=0):和findall类似,但返回的是一个迭代器。
  • re.split(pattern, string, maxsplit=0, flags=0):按照能够匹配的子串将字符串分割后返回列表。
  • re.sub(pattern, repl, string, count=0, flags=0):在字符串中查找匹配正则表达式的部分,并将其替换为另一个字符串。
  • re.compile(pattern, flags=0):将正则表达式编译成一个Pattern对象,可以供match()和search()这两个函数使用。

4. 示例

以下是一些使用Python正则表达式的示例:

  1. re.match()

import re  # 匹配字符串起始位置的模式  
pattern = r'Hello'  
string = 'Hello, world!'  
match = re.match(pattern, string)  
if match:  print('Found match:', match.group())  # 输出: Found match: Hello  
else:  print('No match found.')
  1. re.search()

import re  # 在整个字符串中搜索模式  
pattern = r'\d+'  # 匹配一个或多个数字  
string = 'The price is 123 dollars.'  
search = re.search(pattern, string)  
if search:  print('Found match:', search.group())  # 输出: Found match: 123  
else:  print('No match found.')
  1. re.findall()

import re  # 找到所有匹配模式的子串  
pattern = r'\b\w+\b'  # 匹配单词边界之间的单词  
string = 'Hello world, this is a Python tutorial.'  
matches = re.findall(pattern, string)  print('Matches:', matches)  # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']
  1. re.finditer()

import re  # 找到所有匹配模式的子串,并返回迭代器  
pattern = r'\d+'  
string = 'The numbers are 123 and 456.'  
matches = re.finditer(pattern, string)  
for match in matches:  print('Found match:', match.group())  # 输出: Found match: 123 和 Found match: 456
  1. re.split()

import re  # 使用模式分割字符串  
pattern = r'\s+'  # 匹配一个或多个空白字符  
string = 'This is a test string.'  
split_string = re.split(pattern, string)  print('Split string:', split_string)  # 输出: Split string: ['This', 'is', 'a', 'test', 'string.']
  1. re.sub()

import re  # 替换字符串中匹配模式的子串  
pattern = r'\d+'  
repl = 'NUMBER'  
string = 'The price is 123 dollars and the code is 456.'  
new_string = re.sub(pattern, repl, string)  print('New string:', new_string)  # 输出: New string: The price is NUMBER dollars and the code is NUMBER.
  1. re.compile()

import re  # 编译正则表达式为Pattern对象,之后可以多次使用  
pattern = re.compile(r'\b\w+\b')  
string = 'Hello world, this is a Python tutorial.'  
matches = pattern.findall(string)  print('Matches:', matches)  # 输出: Matches: ['Hello', 'world', 'this', 'is', 'a', 'Python', 'tutorial']

这些例子涵盖了re模块中常用的函数和方法,并展示了如何使用它们来匹配、搜索、查找所有匹配项、迭代匹配项、分割字符串以及替换字符串中的模式。你可以根据实际需要调整正则表达式和字符串来适应不同的场景。

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

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

相关文章

C++ ——数组介绍和实例

文章目录 **定义数组****初始化数组****访问数组元素****一维数组与多维数组****数组与指针****数组的局限性****现代C中的替代方案** 以下是一个C程序实例,演示了如何定义、初始化、访问一维数组以及使用循环遍历数组: C ——数组 C 中的“数组”是一种…

vue2项目设置浏览器标题title及图标logo

工作中肯定会遇到要修改网页的标题title及图标logo 一、固定设置标题方案 方法一:在vue.config.js文件,添加如下代码: chainWebpack: config > {// 配置网页标题config.plugin(html).tap((args) > {args[0].title 标题return args})…

《装饰器模式(极简c++)》

本文章属于专栏- 概述 - 《设计模式(极简c版)》-CSDN博客 模式说明: 方案: 装饰类和派生类同根,然后装饰类中放一个派生类,以在接口不动的情况下增加功能优点: 可以灵活地扩展对象功能&#xf…

[TS面试]keyof和typeof关键字作用?

keyof和typeof关键字作用? keyof 索引类型查询操作符, 获取索引类型属性名, 构成联合类型 typeof 获取一个变量或者对象的类型 let str:string ‘hello’ // typeof str >:string keyof typeof 获取 联合类型的key enum A{A, B, C }type unionType keyof typeof A; /…

static修饰成员的作用

1、static概念 声明为static的类成员称为类的静态成员,用static修饰的成员变量,称之为静态成员变量;用static修饰的成员函数**,称之为静态成员函数。**静态成员变量一定要在类外进行初始化。 class A{ public: A() { _scount; } A…

数字身份的革命:解锁 Web3 的身份验证技术

引言 随着数字化时代的到来,个人身份认证成为了日常生活和商业活动中不可或缺的一部分。传统的身份验证方式存在着安全性低、易伪造、不便利等问题,因此,人们迫切需要一种更安全、更便捷的身份验证技术。在这样的背景下,Web3的身…

macos下 jupyter服务安装和vscode链接密码设置 .ipynb文件

最近收到了一些后缀为.ipynb的文件, 这个文件就是使用jupyter编辑的,于是就需要安装一个jupyter服务, 对于最新版本的jupyter 网上很多的资料都已经过期了,这里以最新版本的jupyter为例。 jupyter lab安装 jupyter 这个工具包含…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

如何更好的优化HTTPS

由裸数据传输的 HTTP 协议转成加密数据传输的 HTTPS 协议,给应用数据套了个「保护伞」,提高安全性的同时也带来了性能消耗。 HTTPS 相比 HTTP 协议多一个 TLS 协议握手过程,目的是为了通过非对称加密握手协商或者交换出对称加密密钥 分析性…

CUDA安装 Windows版

目录 一、说明 二、安装工具下载 三、CUDA安装 四、cuDNN配置 五、验证安装是否成功 一、说明 windows10 版本安装 CUDA ,首先需要下载两个安装包 CUDA toolkitcuDNN 官方教程 CUDA:https://docs.nvidia.com/cuda/cuda-installation-guide-micro…

校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!

随着科技的不断发展,智慧校园系统和跑腿外卖小程序已经成为当今社会的热门话题。作为未来的重要趋势之一,科技在教育领域中的应用越来越广泛。本文将探讨智慧校园系统和跑腿外卖小程序的开发过程,并阐述如何利用科技“育”见未来 一、智慧校…

接口自动化之 + Jenkins + Allure报告生成 + 企微消息通知推送

接口自动化之 Jenkins Allure报告生成 企微消息通知推送 在jenkins上部署好项目,构建成功后,希望可以把生成的报告,以及结果统计发送至企微。 效果图: 实现如下。 1、生成allure报告 a. 首先在Jenkins插件管理中&#x…

学习人工智能-点积dot product,计算transformer模型里面的attention

因为transformer模型里面计算attention用到了点积dot product来计算相似度 or 距离,所以补充一下点积的知识。 点积的代数定义: 点积在数学中,又称数量积(dot product; scalar product),是指接受在实数R上…

LVS负载均衡-DR模式配置

LVS:Linux virtual server ,即Linux虚拟服务器 LVS自身是一个负载均衡器(Director),不直接处理请求,而是将请求转发至位于它后端的真实服务器real server上。 LVS是四层(传输层 tcp/udp)负载均衡…

11.Notepad++

文章目录 一、下载和安装设置练习 以前在记事本上写的代码看上去有点累,因为所有的单词看上去都是黑色的,并且当代码出现问题后,它提示第三行,我们还需要一行一行去数。这些问题都可以由一个高级记事本: Notepad 来解…

Windows直接运行python程序

Windows直接运行python程序 一、新建bat脚本二、新建vbs脚本 一、新建bat脚本 新建bat批处理脚本,写入以下内容 echo off call conda activate pytorch python app.pyecho off:在此语句后所有运行的命令都不显示命令行本身,但是本身的指令是…

第二篇:3.1 广告印象(AD Impression) - IAB与MRC及《增强现实广告效果测量指南1.0》

--- 我为什么要翻译美国IAB科技公司系列标准 翻译计划 第一篇概述—IAB与MRC及《增强现实广告效果测量指南》之目录、适用范围及术语第二篇广告效果测量定义和其他矩阵之- 3.1 广告印象(AD Impression)第三篇广告效果测量定义和其他矩阵之- 3.2 可见度 …

前端埋点全解及埋点SDK实现方式

一、什么是埋点 所谓“埋点”,是数据采集领域(尤其是用户行为数据采集领域)的术语,指的是针对特定用户行为或事件进行捕获、处理和发送的相关技术及其实施过程。比如用户某个icon点击次数、观看某个视频的时长等等。 埋点…

什么是物联网监控平台?部署物联网平台有什么作用?

随着物联网技术的飞速发展,越来越多的企业开始关注并投入到这一领域。物联网监控平台作为连接物理世界与数字世界的桥梁,正逐渐成为企业数字化转型的关键组件。今天,我们将深入探讨物联网监控平台的定义、部署物联网平台的作用,以…

linux环境gitlab迁移到新服务器

目录 备份项目备份gitlab配置阿里云磁盘格式化准备 最近服务器中了挖矿病毒,清理几次,都没有搞定,只能重新安装gitlab 备份项目 先把项目备份到本地 git pull git remote prune origin确保本地代码是最新的并且拥有所有的分支 git remote …