正则表达式补充——python

news2025/4/15 5:46:48

简介

        本章是对前面正则表达式的补充。

一、复杂的查找替换等任务

content = ''' 张三是脑卒中病
李四,是高血脂
苏齐,是肺结核病
六六,是血血血血'''

import re
p = re.compile(r'...病')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

  • r'...病' 是一个原始字符串正则表达式模式

  • . 在正则中表示任意单个字符(除换行符)

  • 三个连续的.表示匹配任意三个字符

  • 最后的是字面匹配

  • 整体模式匹配:四个字符的组合,前三个是任意字符,第四个必须是"病"

二、贪婪模式与非贪婪模式

1、贪婪模式

content = '<html><head>hello</head><title>Title</title></html>'

import re
p = re.compile(r'<.*>')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

1. 正则表达式 <.*> 分解:

  • < 匹配标签开始的左尖括号

  • .* 贪婪模式:匹配任意字符(尽可能多,直到最后一个 >

  • > 匹配标签结束的右尖括号

2. 匹配过程演示:

输入字符串:

<html><head>hello</head><title>Title</title></html>

匹配过程:

  1. 找到第一个 < → 位置0

  2. 贪婪匹配 .* → 直接跳到字符串末尾

  3. 反向回溯找到最后一个 > → 位置47

  4. 最终匹配整个字符串:<html>...</html>

2、非贪婪模式

content = '<html><head>hello</head><title>Title</title></html>'

import re
p = re.compile(r'<.*?>')
for one in p.findall(content):
    print(one)

运行结果:

代码分析:

  1. 正则表达式 r'<.*?>' 分解:

    • < 匹配标签开始的左尖括号

    • .*? 非贪婪模式,匹配任意字符(尽可能少)

    • > 匹配标签结束的右尖括号

  2. 非贪婪匹配 ? 的关键作用:
    如果没有问号 <.*> 会匹配从第一个 < 到最后一个 > 的整个内容(贪婪匹配),但因为加了 ?,它会匹配最短可能的片段,即逐个匹配每个标签。

📌 关键总结
正则表达式模式结果适用场景
<.*>贪婪匹配整个字符串几乎不用于HTML解析
<.*?>非贪婪逐个匹配独立标签适合简单标签提取

三、常见问题与建议

1、特殊字符需要转义

# 错误写法(未转义.)
re.findall(r'www.example.com', text)  

# 正确写法(转义.)
re.findall(r'www\.example\.com', text)

2、处理多行文本

text = "第一行\n第二行\n第三行"
# 启用多行模式(^匹配每行开头)
re.findall(r'^第', text, flags=re.MULTILINE)  
# 输出: ['第', '第']

3、性能优化建议

  • 预编译正则表达式(尤其重复使用时):

pattern = re.compile(r'\d{5}')  # 提前编译
pattern.findall(text)

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

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

相关文章

[ctfshow web入门] web7

信息收集 题目提示&#xff1a;版本控制很重要&#xff0c;但不要部署到生产环境更重要。 那么很有可能&#xff0c;版本控制相关的信息被部署到环境了&#xff0c;比如比如version.txt记录了一些相关配件的版本&#xff0c;git版本管理工具中的.git文件夹未删除 信息收集就是…

DeepSeek-V3 API:开启下一代AI应用开发的新篇章

引言 在人工智能技术日新月异的今天&#xff0c;大型语言模型(LLM)正以前所未有的速度改变着我们与技术互动的方式。DeepSeek-V3作为国内领先的大语言模型之一&#xff0c;其API的开放为开发者提供了强大的AI能力集成方案。 DeepSeek-V3 API的核心优势 1.强大的语言理解与生…

go语言应该如何学习

以下是学习Go语言的高效路径及关键技巧&#xff0c;结合多个优质来源整理而成&#xff0c;适合不同基础的学习者&#xff1a; 一、基础语法快速入门&#xff08;1-2周&#xff09; 1、环境搭建 下载安装Go SDK&#xff0c;配置GOPATH和GOROOT环境变量&#xff0c;推荐使用Go…

NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)

路径类dp是线性dp的⼀种&#xff0c;它是在⼀个nm的矩阵中设置⼀个⾏⾛规则&#xff0c;研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题 矩阵的最小路径和_牛客题霸_牛客网 状态表⽰&#xff1a; dp[i][j]表⽰&#xff1a;到达[i, j]位置处&#xff0c;最⼩…

React + TipTap 富文本编辑器 实现消息列表展示,类似Slack,Deepseek等对话框功能

经过几天折腾再折腾&#xff0c;弄出来了&#xff0c;弄出来了&#xff01;&#xff01;&#xff01; 消息展示 在位编辑功能。 两个tiptap实例1个用来展示 消息列表&#xff0c;一个用来在位编辑消息。 tiptap灵活富文本编辑器&#xff0c;拓展性太好了!!! !!! 关键点&#x…

博途 TIA Portal之1200做主站与汇川EASY的TCP通讯

前言,虽然已经做了几篇关于TCP通讯的文章,但是不同的PLC之间的配合可能不同,下面将演示这种差异。 关于汇川EASY做从站的配置请参见下方链接文章:汇川EASY系列之以太网通讯(套接字socket做从站)_汇川以太网tcp套接字fb块-CSDN博客 1、硬件准备: 1200PLC,汇川EASY320…

蓝桥杯速成刷题清单(上)

一、1.排序 - 蓝桥云课 &#xff08;快速排序&#xff09;算法代码&#xff1a; #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …

Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)

为什么需要理解CSP与GMP&#xff1f; 当我们启动一个Go程序时&#xff0c;可能会创建成千上万个goroutine&#xff0c;它们是如何被调度到有限的CPU核心上的&#xff1f;为什么Go能够如此轻松地处理高并发场景&#xff1f;为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…

Linux服务器——Samba服务器

简介 Samba 是一个开源的跨平台文件共享服务​​&#xff0c;允许 Linux/Unix 系统与 Windows 系统实现文件和打印机的共享与互操作。其核心协议为 ​​SMB/CIFS​​&#xff08;Server Message Block / Common Internet File System&#xff09;&#xff0c;是 Windows 网络中…

华为网路设备学习-17

目录 一、加密算法 二、验证算法 三、IPsec协议 1.IKE协议&#xff08;密钥交换协议&#xff09; ①‌ISAKMP&#xff08;Internet Security Association and Key Management Protocol&#xff09;互联网安全关联和密钥管理协议 ②安全关联&#xff08;SA&#xff09; ③…

机器学习12-集成学习-案例

参考 【数据挖掘】基于XGBoost的垃圾短信分类与预测 【分类】使用XGBoost算法对信用卡交易进行诈骗预测 银行卡电信诈骗危险预测(LightGBM版本) 【数据挖掘】基于XGBoost的垃圾短信分类与预测 基于XGBoost的垃圾短信分类与预测 我分享了一个项目给你《【数据挖掘】基于XG…

【数据库原理及安全实验】实验二 数据库的语句操作

目录 指导书原文 实操备注 指导书原文 【实验目的】 1) 掌握使用SQL语言进行数据操纵的方法。 【实验原理】 1) 面对三个关系表student&#xff0c;course&#xff0c;sc。利用SQL语句向表中插入数据&#xff08;insert&#xff09;&#xff0c;然后对数据进行delete&…

【BFT帝国】20250409更新PBFT总结

2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024 索引时间&#xff08;可被引用&#xff09;: 240412 被引:…

Linux-CentOS-7—— 配置静态IP地址

文章目录 CentOS-7——配置静态IP地址VMware workstation的三种网络模式配置静态IP地址1. 编辑虚拟网络2. 确定网络接口名称3. 切换到网卡所在的目录4. 编辑网卡配置文件5. 查看网卡文件信息6. 重启网络服务7. 测试能否通网8. 远程虚拟主机&#xff08;可选&#xff09; 其他补…

Jupyter Lab 无法启动 Kernel 问题排查与解决总结

&#x1f4c4; Jupyter Lab 无法启动 Kernel 问题排查与解决总结 一、问题概述 &#x1f6a8; 现象描述&#xff1a; 用户通过浏览器访问远程服务器的 Jupyter Lab 页面&#xff08;http://xx.xx.xx.xx:8891/lab&#xff09;后&#xff0c;.ipynb 文件可以打开&#xff0c;但无…

算法训练之位运算

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…

C++设计模式+异常处理

#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…

checkra1n越狱出现的USB error -10问题解决

使用checkra1n进行越狱是出现&#xff1a; 解决办法(使用命令行进行越狱)&#xff1a; 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条&#xff0c;同时按住home和电源键&#…

golang-defer延迟机制

defer延迟机制 defer是什么 defer是go中一种延迟调用机制。 执行时机 defer后面的函数只有在当前函数执行完毕后才能执行。 执行顺序 将延迟的语句按defer的逆序进行执行&#xff0c;也就是说先被defer的语句最后被执行&#xff0c;最后被defer的语句&#xff0c;最先被执…

【小沐学Web3D】three.js 加载三维模型(Angular)

文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL&#xff08;3D绘图标准&#xff09;引擎&#xff0c;可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API &#xff0c;为我们提供了…