当前位置: 首页 > news >正文

Python正则表达式学习笔记(入门)

1. 介绍

正则表达式是一种强大的模式匹配工具,用于处理文本数据。在Python中,我们使用re模块来操作正则表达式。

2. 基本语法

建议先看
"5. re模块函数"了解searchmatch的区别"和
2.3 特殊字符转义"了解如何应对特殊符号

2.1 字符匹配

  1. .: 匹配任意字符(除了换行符 \n
import re
pattern = re.compile(r"he..o")
result = pattern.match("hello")
print(result.group())  

Output: hello

  • []: 匹配方括号内的任一字符
    pattern = re.compile(r"[aeiou]")
    result = pattern.search("Hello")
    print(result.group()) 
    

Output: e

注意:方括号内的字母之间无需空格,因为空格算一个字符,也会参与匹配

  • |: 匹配两个或多个模式之一
    pattern = re.compile(r"cat|dog")
    result = pattern.search("I love my cat")
    print(result.group())  
    

Output: cat

2.2 重复匹配

  • *: 匹配前一个字符0次或多次

  • +: 匹配前一个字符1次或多次

  • ?: 匹配前一个字符0次或1次

    pattern = re.compile(r"go*gle")
    result = pattern.match("gooogle")
    print(result.group())  
    

    Output: gooogle

2.3 特殊字符转义

使用\转义特殊字符,如.*+

3. 弱进阶用法

敲黑板:groups() 用于返回捕获组的匹配结果元组,
group() 用于返回整个匹配结果或指定编号的捕获组的匹配结果
要注意的是,捕获组编号从 1 开始计数,而不是从 0 开始。

3.1 分组和捕获

使用圆括号 () 进行分组和捕获

pattern = re.compile(r"(\d+)-(\d+)-(\d+)")
result = pattern.match("2023-11-15")
print(result.groups()) 

Output: (‘2023’, ‘11’, ‘15’)
当内容很重要时,捕获以后可以 方便后面引用

3.2 非捕获组

有时我们需要分组但不捕获,可以使用 (?:...)

pattern = re.compile(r"Mr (?:John|Doe)")
result = pattern.match("Mr John")
print(result.group())  

Output: Mr John
不重要的内容无需捕获,可以提高程序性能,减少资源占用

3.3 向后引用

使用\1\2等引用前面捕获的组的内容(再次强调:是内容,而不是格式)

pattern = re.compile(r"(\d+)-\1")
result = pattern.match("2023-2023")
print(result.group()) 

Output: 2023-2023

4. 匹配开始和结尾

  • ^: 匹配字符串的开始

  • $: 匹配字符串的结尾

    pattern = re.compile(r"^Hello")
    result = pattern.match("Hello, World!")
    print(result.group()) 
    

Output: Hello

pattern = re.compile(r"(World!$)")
result = pattern.search("Hello, World!")
print(result.group())

Output: World!

在正则表达式中,^ 用于匹配一行的开头,而不是整个文本的开头,
当使用 ^ 放在正则表达式的开头时,它表示该模式只匹配行的开头位置
换句话说,模式必须在行的开头出现才能匹配成功
例如,如果你有一个多行的字符串,每行以数字开头,你可以使用 ^\d 来匹配每行的开头数字。

$ 匹配字符串的结尾,同理

5. re模块函数

  • re.match(): 从字符串的开头匹配模式
  • re.search(): 在字符串中查找匹配模式的第一个位置
  • re.findall(): 返回字符串中所有匹配的模式
  • re.sub(): 替换字符串中匹配模式的部分

6. 贪婪与非贪婪匹配

在重复匹配时,加上?可以实现非贪婪匹配。

pattern = re.compile(r"<.*?>")
result = pattern.search("<html><head><title>Title</title></head></html>")
print(result.group()) 

Output:

默认情况下,正则表达式是贪婪匹配,也就是它会尽可能地匹配最长的字符串。贪婪匹配会将模式中的量词(如 *、+、?、{})设置为尽可能多地匹配字符。
例如,正则表达式 a.*b 可以匹配 “afoobarb” 中的整个字符串,而不只是 “a” 和 “b” 之间的部分。

相比之下,非贪婪匹配匹配尽可能少的字符。它使用量词的非贪婪版本来实现。在正则表达式中,非贪婪模式的量词是加上 ? 符号。
例如,a.*?b 是一个非贪婪匹配模式,它只匹配 “a” 和 “b” 之间的最短字符串。对于 “afoobarb”,匹配结果将是 “afoob”。

7. 预搜索

  • (?=...): 正向预查

  • (?!...): 负向预查

    pattern = re.compile(r"\d+(?=%)")
    result = pattern.search("42%")
    print(result.group())  
    

Output: 42

正向预查 (?=…) 表示在匹配当前位置之后的内容时,需要满足 … 的条件。但是,正向预查不会消耗字符串,也不会将预查的内容包含在匹配结果中。
负向预查 (?!..) 则表示在匹配当前位置之后的内容时,需要不满足 … 的条件才能匹配成功。与正向预查类似,负向预查也不会消耗字符串,也不会将预查的内容包含在匹配结果中。
相当于先判断后面的字符串是否符合条件决定是否匹配

相关文章:

Python正则表达式学习笔记(入门)

1. 介绍 正则表达式是一种强大的模式匹配工具&#xff0c;用于处理文本数据。在Python中&#xff0c;我们使用re模块来操作正则表达式。 2. 基本语法 建议先看 "5. re模块函数"了解search和match的区别"和 2.3 特殊字符转义"了解如何应对特殊符号 2.1 字…...

C++核心编程 day09 类型转换、异常、输入输出流

C核心编程 day09 类型转换、异常、输入输出流 1. 类型转换2. 异常2.1 异常语法2.2 C标准异常库 3. 输入输出流3.1 输入输出流概念以及流类库3.2 标准输入流3.3 标准输出流3.4 文件读写 1. 类型转换 C中的类型转换有四类&#xff0c;分别是静态转换、动态转换、常量转换、重新解…...

Docker安装PostgreSQL

拉取镜像 docker pull postgres 运行容器 docker run --name postgres-db -e TZPRC -e POSTGRES_USERroot -e POSTGRES_DBdatabase -e POSTGRES_PASSWORD123456 -p 5432:5432 -v /Users/xiaoping/byx/postgresql/data:/var/lib/postgresql/data -d postgres run&#xff0c…...

py并发编程实践-demo

需求 已知条件&#xff1a;appX -请求-> api 多进程实现并发请求api 给定app应用列表&#xff0c;请求api核数 from datetime import datetime, timedelta from multiprocessing import Processclass ProcessTest(object):"""多进程并发请求API&#xff…...

1-2 暴力破解-模拟

模拟&#xff1a;根据题目要求编写代码 可分为&#xff1a;图形排版&#xff08;根据某种规则输出特定图形&#xff09;、日期问题、其他模拟 一.图形排版 1.输出梯形&#xff08;清华大学&#xff09; 法一&#xff1a;等差数列 分析&#xff1a;每行的星号个数为等差数列2n2…...

机器学习中的Bagging思想

Bagging&#xff08;Bootstrap Aggregating&#xff09;是机器学习中一种集成学习方法&#xff0c;旨在提高模型的准确性和稳定性。Bagging的思想源自于Bootstrap采样技术&#xff0c;其基本原理如下&#xff1a; Bootstrap采样&#xff1a; Bagging的核心思想是通过对原始数据…...

基于PyTorch搭建你的生成对抗性网络

前言 你听说过GANs吗&#xff1f;还是你才刚刚开始学&#xff1f;GANs是2014年由蒙特利尔大学的学生 Ian Goodfellow 博士首次提出的。GANs最常见的例子是生成图像。有一个网站包含了不存在的人的面孔&#xff0c;便是一个常见的GANs应用示例。也是我们将要在本文中进行分享的…...

ROS话题(Topic)通信:自定义msg - 例程与讲解

在 ROS 通信协议中&#xff0c;数据是以约定好的结构传输的&#xff0c;即数据类型&#xff0c;比如Topic使用的msg&#xff0c;Service使用的srv&#xff0c;ROS 中的 std_msgs 封装了一些原生的数据类型&#xff0c;比如&#xff1a;Bool、Char、Float32、Int64、String等&am…...

【Vue配置项】 computed计算属性 | watch侦听属性

目录 前言 computed计算属性 什么是计算属性&#xff1f; Vue的原有属性是什么&#xff1f; 得到的全新的属性是什么&#xff1f; 计算属性怎么用&#xff1f; 计算属性的作用是什么&#xff1f; 为什么说代码执行率高了&#xff1f; computed计算属性中的this指向 co…...

linux 查看命令使用说明

查看命令的使用说明的命令有三种&#xff0c;但并不是每个命令都可以使用这三种命令去查看某个命令的使用说明&#xff0c;如果一种不行就使用另外一种试一试。 1.whatis 命令 概括命令的作用 2.命令 --help 命令的使用格式和选项的作用 3.man 命令 命令的作用和选项的详细…...

ceph修复pg inconsistent( scrub errors)

异常情况 1、收到异常情况如下: OSD_SCRUB_ERRORS 12 scrub errors PG_DAMAGED Possible data damage: 1 pg inconsistentpg 6.d is activeremappedinconsistentbackfill_wait, acting [5,7,4]2、查看详细信息 登录后复制 #ceph health detail HEALTH_ERR 12 scrub errors…...

【论文精读】VOYAGER: An Open-Ended Embodied Agent with Large Language Models

Understanding LSTM Networks 前言Abstract1 Introduction2 Method2.1 Automatic Curriculum2.2 Skill Library2.3 Iterative Prompting Mechanism 3 Experiments3.1 Experimental Setup3.2 Baselines3.3 Evaluation Results3.4 Ablation Studies3.5 Multimodal Feedback from …...

Linux安装DMETL5与卸载

Linux安装DMETL5与卸载 环境介绍1 DM8数据库配置1.1 DM8数据库安装1.2 初始化达梦数据库1.3 创建DMETL使用的数据库用户 2 配置DMETL52.1 解压DMETL5安装包2.2 安装调度器2.3 安装执行器2.4 安装管理器2.5 启动dmetl5 调度器2.6 启动dmetl5 执行器2.7 启动dmetl5 管理器2.8 查看…...

Office Word 中的宏

Office Word 中的宏 简介宏的使用将自定义创建的宏放入文档标题栏中的“自定义快速访问工具栏”插入指定格式、内容的字符选中word中的指定文字查找word中的指定文字A&#xff0c;并替换为指定文字B插入文本框并向内插入文字word 表格中的宏操作遍历表格中的所有内容批量设置表…...

qt中d指针

在Qt中&#xff0c;d指针是一种常见的设计模式&#xff0c;也称为"PIMPL"&#xff08;Private Implementation&#xff09;或者"Opaque Pointer"。它主要用于隐藏类的实现细节&#xff0c;提供了一种封装和隔离的方式&#xff0c;以便在不影响公共接口的情…...

交易者最看重什么?anzo Capital这点最重要!

交易者最看重什么&#xff1f;有人会说技术&#xff0c;有人会说交易策略&#xff0c;有人会说盈利&#xff0c;但anzo Capital认为Vishal 最看重的应该是眼睛吧&#xff01; 29岁的Vishal Agraval在9年前因某种原因失去了视力&#xff0c;然而&#xff0c;他的失明并未能阻…...

window 搭建 MQTT 服务器并使用

1. 下载 安装 mosquitto 下载地址&#xff1a; http://mosquitto.org/files/binary/ win 使用 win32 看自己电脑下载相应版本&#xff1a; 一直安装&#xff1a; 记住安装路径&#xff1a;C:\Program Files\mosquitto 修改配置文件&#xff1a; allow_anonymous false 设置…...

Prometheus+Ansible+Consul实现服务发现

一、简介 1、Consul简介 Consul 是基于 GO 语言开发的开源工具&#xff0c;主要面向分布式&#xff0c;服务化的系统提供服务注册、服务发现和配置管理的功能。Consul 提供服务注册/发现、健康检查、Key/Value存储、多数据中心和分布式一致性保证等功能。 在没有使用 consul 服…...

【原创】java+swing+mysql校园活动管理系统设计与实现

前言&#xff1a; 本文介绍了一个校园活动管理系统的设计与实现。该系统基于JavaSwing技术&#xff0c;采用C/S架构&#xff0c;使用Java语言开发&#xff0c;以MySQL作为数据库。系统实现了活动发布、活动报名、活动列表查看等功能&#xff0c;方便了校园活动的发布和管理&am…...

vscode中vue项目引入的组件的颜色没区分解决办法

vscode中vue项目引入的组件的颜色没区分解决办法 图中引入组件和其他标签颜色一样没有区分&#xff0c;让开发者不易区分&#xff0c;很蓝瘦 这个就很直观&#xff0c;解决办法就是你当前的vscode版本不对&#xff0c;你得去找找其他版本&#xff0c;我的解决办法就是去官网历…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

循环冗余码校验CRC码 算法步骤+详细实例计算

通信过程&#xff1a;&#xff08;白话解释&#xff09; 我们将原始待发送的消息称为 M M M&#xff0c;依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)&#xff08;意思就是 G &#xff08; x ) G&#xff08;x) G&#xff08;x) 是已知的&#xff09;&#xff0…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

#Uniapp篇:chrome调试unapp适配

chrome调试设备----使用Android模拟机开发调试移动端页面 Chrome://inspect/#devices MuMu模拟器Edge浏览器&#xff1a;Android原生APP嵌入的H5页面元素定位 chrome://inspect/#devices uniapp单位适配 根路径下 postcss.config.js 需要装这些插件 “postcss”: “^8.5.…...

TSN交换机正在重构工业网络,PROFINET和EtherCAT会被取代吗?

在工业自动化持续演进的今天&#xff0c;通信网络的角色正变得愈发关键。 2025年6月6日&#xff0c;为期三天的华南国际工业博览会在深圳国际会展中心&#xff08;宝安&#xff09;圆满落幕。作为国内工业通信领域的技术型企业&#xff0c;光路科技&#xff08;Fiberroad&…...

《Offer来了:Java面试核心知识点精讲》大纲

文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...