python基础之正则表达式

news2024/7/2 20:47:42

Python中的正则表达式(regular expressions,简称regex)是强大的字符串处理工具,用于搜索、匹配和替换字符串中的特定模式。Python通过 re 模块提供对正则表达式的支持。以下是对Python正则表达式的详细讲解。

基本概念和语法

导入模块
import re
基本函数
  • re.match(pattern, string): 从字符串的起始位置匹配模式。
  • re.search(pattern, string): 搜索整个字符串,返回第一个匹配的对象。
  • re.findall(pattern, string): 返回字符串中所有非重叠匹配的列表。
  • re.finditer(pattern, string): 返回字符串中所有非重叠匹配的迭代器。
  • re.sub(pattern, repl, string): 替换字符串中所有匹配的子串。
编译模式

可以通过 re.compile() 预编译正则表达式模式,提高匹配效率:

pattern = re.compile(r'\d+')
result = pattern.findall('123 abc 456')
print(result)  # ['123', '456']

常用正则表达式符号

字符匹配
  • .: 匹配除换行符以外的任意字符。
  • \d: 匹配任意数字,相当于 [0-9]
  • \D: 匹配任意非数字字符。
  • \w: 匹配字母、数字和下划线,相当于 [a-zA-Z0-9_]
  • \W: 匹配任意非字母、数字和下划线的字符。
  • \s: 匹配空白字符(包括空格、制表符、换页符等)。
  • \S: 匹配非空白字符。
边界匹配
  • ^: 匹配字符串的开头。
  • $: 匹配字符串的结尾。
  • \b: 匹配单词边界。
  • \B: 匹配非单词边界。
量词
  • *: 匹配前面的字符0次或多次。
  • +: 匹配前面的字符1次或多次。
  • ?: 匹配前面的字符0次或1次。
  • {n}: 匹配前面的字符恰好n次。
  • {n,}: 匹配前面的字符至少n次。
  • {n,m}: 匹配前面的字符至少n次,至多m次。
分组
  • (...): 匹配括号内的正则表达式,并形成一个组。
  • (?:...): 匹配括号内的正则表达式,但不形成组。
特殊转义字符
  • \\: 反斜杠,用于转义特殊字符。
  • \n: 匹配换行符。
  • \t: 匹配制表符。

示例

匹配手机号
import re

pattern = re.compile(r'1[3-9]\d{9}')
text = '我的手机号是13812345678,请联系我。'
match = pattern.search(text)
if match:
    print(match.group())  # 输出:13812345678
提取电子邮件地址
import re

pattern = re.compile(r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+')
text = '请发送邮件到 example.email@example.com 联系我们。'
emails = pattern.findall(text)
print(emails)  # 输出:['example.email@example.com']
替换文本中的URL
import re

pattern = re.compile(r'https?://[^\s]+')
text = '访问我们的官网 http://example.com 或 https://example.org 获取更多信息。'
new_text = pattern.sub('URL', text)
print(new_text)  # 输出:访问我们的官网 URL 或 URL 获取更多信息。

正则表达式标志

常用标志
  • re.IGNORECASEre.I: 忽略大小写。
  • re.MULTILINEre.M: 多行模式,^$ 匹配每一行的开头和结尾。
  • re.DOTALLre.S: 点号匹配包括换行符在内的任意字符。
  • re.VERBOSEre.X: 允许在正则表达式中使用空白符和注释,以增加可读性。

示例:

import re

pattern = re.compile(r"""
    \d+     # 匹配一个或多个数字
    \s      # 匹配一个空白符
    \w+     # 匹配一个或多个字母或数字
""", re.VERBOSE)
text = '123 abc'
match = pattern.search(text)
if match:
    print(match.group())  # 输出:123 abc

以上是Python正则表达式的详细讲解。正则表达式在文本处理、数据清洗和数据验证等方面非常有用。通过练习和熟悉各种模式和标志,可以大大提高处理字符串的效率和能力。

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

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

相关文章

【C++深度探索】继承机制详解(一)

hello hello~ ,这里是大耳朵土土垚~💖💖 ,欢迎大家点赞🥳🥳关注💥💥收藏🌹🌹🌹 💥个人主页:大耳朵土土垚的博客 &#x1…

git客户端工具之Github,适用于windows和mac

对于我本人,我已经习惯了使用Github Desktop,不同的公司使用的代码管理平台不一样,就好奇Github Desktop是不是也适用于其他平台,结果是可以的。 一、克隆代码 File --> Clone repository… 选择第三种URL方式,输入url &…

汽车电子行业知识:什么是车载智能座舱

1.什么是车载智能座舱 车载智能座舱是指搭载在汽车内部的一种智能系统,它集成了各种功能和技术,旨在提升驾驶体验、增加安全性和提供更多的便利。这种系统可以包括诸如智能驾驶辅助、信息娱乐、智能语音控制、车内环境控制、车辆健康监测等功能。通过车…

使用Java连接数据库并且执行数据库操作和创建用户登录图形化界面(3)专栏里有上两步的源代码

创建用户登录程序,验证用户账号和密码信息是否在数据库student中的用户表tb_account中存在。用户登录界面如下图所示: 当单击“登录”按钮时,处理以下几种情况: (1)用户名未输入,提示用户名不能…

Java_日志

日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随时以开关的形式控制日志启停,无需侵入到源代码中去进行修改。 日志技术的体系结构 日志框架:JUL、Log4j、Logback、其他实现。 日志接口&#xf…

搭建ragflow的步骤

前提条件 CPU > 4 核 RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 如果你并没有在本机安装 Docker(Windows、Mac,或者 Linux), 可以参考文档 Install Docker Engine 自行安装。 启动服务器 …

MISRA C

介绍 MISRA C 是由汽车产业软件可靠性协会(Motor Industry Software Reliability Association)提出的 C 语言编程标准,可提高嵌入式系统软件的安全性和可靠性。这些指南由汽车制造商、零部件供应商和工程咨询公司合作的汽车工业软件可靠性协…

STM32G4系列之DAC

一、STM32G4单片机有几个DAC外设? STM32G4单片机共有4个DAC,两个为低速DAC(采样率1MHz),两个为高速DAC(采样率15MHz)。共包括7个通道,3个外部通道和4个内部通道。 三个外部DAC包括DAC1和DAC2,其可以映射到外部管脚&am…

捕获野生的登录页,暴改Vue3

1.实现效果 2.Vue组件 <script setup> import {onMounted} from "vue";onMounted(()>{// getAllData() }) </script><template><div class"login"><div class"form-cont"><div class"form-top"&…

论文阅读_优化RAG系统的检索

英文名称: The Power of Noise: Redefining Retrieval for RAG Systems 中文名称: 噪声的力量&#xff1a;重新定义RAG系统的检索 链接: https://arxiv.org/pdf/2401.14887.pdf 作者: Florin Cuconasu, Giovanni Trappolini, Federico Siciliano, Simone Filice, Cesare Campag…

echarts实现堆叠图加折线混合图

vue组件实现代码&#xff1a; <template><div :id"chartId" style"width: 100%; height: 300px"></div> </template><script>import * as echarts from "echarts";export default {name: "doubleStackLine&…

基于SpringBoot漫画网站系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

istitle()方法——判断首字母是否大写其他字母小写

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 istitle()方法用于判断字符串中所有的单词首字母是否为大写而其他字母为小写。istitle()方法的语法格式如下&#xff1a; str.istitle() …

Vite: 高阶特性 Pure ESM

概述 ESM 已经逐步得到各大浏览器厂商以及 Node.js 的原生支持&#xff0c;正在成为主流前端模块化方案。 而 Vite 本身就是借助浏览器原生的 ESM 解析能力( type“module” )实现了开发阶段的 no-bundle &#xff0c;即不用打包也可以构建 Web 应用。不过我们对于原生 ESM 的…

数据倾斜优化:Hive性能提升的核心

文章目录 1. 定义2. 数据倾斜2.1 Map2.2 Join2.3 Reduce 3. 写在最后 1. 定义 数据倾斜&#xff0c;也称为Data Skew&#xff0c;是在分布式计算环境中&#xff0c;由于数据分布不均匀导致某些任务处理的数据量远大于其他任务&#xff0c;从而形成性能瓶颈的现象。这种情况在H…

==和equals的区别(面试题)

和equals有什么区别 对于基本数据类型&#xff0c;比较的是值是否相等&#xff0c;对于引用类型则是比较的地址是否相等&#xff1b;对于equals来说&#xff0c;基本数据类型没有equals方法&#xff0c;对于引用类型equals比较的是引用对象是否相同 那针对以上结论&#xff0c…

RabbitMq教程【精细版一】

一、引言 模块之间的耦合度过高&#xff0c;导致一个模块宕机后&#xff0c;全部功能都不能用了&#xff0c;并且同步通讯的成本过高&#xff0c;用户体验差。 RabbitMQ引言 二、RabbitMQ介绍 MQ全称为Message Queue&#xff0c;消息队列是应用程序和应用程序之间的通信方法。…

python工作目录与文件目录

工作目录 文件目录&#xff1a;文件所在的目录 工作目录&#xff1a;执行python命令所在的目录 D:. | main.py | ---data | data.txt | ---model | | model.py | | train.py | | __init__.py | | | ---nlp | | | bert.py | …

DIVE INTO DEEP LEARNING 56-60

文章目录 56 Gated Recurrent Unit(GRU)56.1 Motivation: How to focus on a sequence56.2 The concept of doors56.3 Candidate hidden state56.4 hidden state56.5 summarize56.6 QA 57 Long short-term memory network57.1 Basic concepts57.2 Long short-term memory netwo…