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

正则表达式:文本处理中的瑞士军刀

正则表达式是用于提取字符串规律的规则,通过特定语法表达,以匹配符合该规律的字符串。它具有通用性,不仅适用于Python,也可用于其他编程语言。

下面我用Python的re模块来进行实战演示:(记得import re

re模块的主要功能有匹配、搜索、分割、匹配和替换......

re模块的方法分为两大类:

  1. 直接使用re模块的方法
  2. 使用正则表达式对象

菜鸟营地

findall

findall(pattern,string[,flags])
# pattern:指定的匹配模式 string:输入的字符串 
# flags:可选参数(用于表示匹配过程中的一些选项)
# 该函数返回值是一个列表

常用pattern 

' . ':通配符,代表任意字符(\n除外),一个点一个字符,例如:

ret = re.findall('m...e', 'cat and mouse') 
print(ret)#['mouse']

' * ':重复,运行*之前的一个字符重复多次,例如:

ret1 = re.findall('o*i', 'oooooi and bye')
print(ret1)#['oooooi']

' ? ':也是重复匹配,允许?之前的字符只能重复0次或者1次,例如:

ret2 = re.findall('ca?t', 'ct cat caat caaat')
print(ret2)#['ct', 'cat']

+ ':也是重复匹配,但是至少重复1次,不能是0次,例如:

ret2 = re.findall('ca+t', 'ct cat caat caaat')
print(ret2)#['cat', 'caat', 'caaat']

{} ':也是重复匹配,但是匹配次数可以自行设置,次数可以是一个数或者范围,例如:

{m}匹配前一个字符出现m次
{m,}匹配前一个字符至少出现m次
{m,n}匹配前一个字符出现m-n次
ret3 = re.findall('ca{2}t', 'ct cat caat caaat caaaat')
print(ret3)#['caat']
ret3 = re.findall('ca{2,}t', 'ct cat caat caaat caaaat')
print(ret3)#['caat', 'caaat', 'caaaat']
ret3 = re.findall('ca{2,3}t', 'ct cat caat caaat caaaat')
print(ret3)#['caat', 'caaat']

' ^ ':必须从字符串的起始位置开始匹配,例如:

ret5 = re.findall('^m...e', 'cat and mouse')
print(ret5)#[]
ret6 = re.findall('^m...e', 'mouse and cat')
print(ret6)#['mouse']

' $ ':值从最后开始匹配,例如:

ret7 = re.findall('m...e$', 'cat and mouse')
print(ret7)#['mouse']

' | ':两个模式进行或的匹配,例如:

ret8 = re.findall('cat|mouse', 'cat and mouse')
print(ret8)#['cat', 'mouse']

' \ ':转义字符,例如:

ret9 = re.findall('/^m...e', '^mouse and cat')
print(ret9)#[]
字符功能
\d匹配数字,即0-9
\D匹配非数字
\s匹配空白,即空格,tab键
\S匹配非空白
\w匹配单词、字符
\W匹配非单词字符
[ ]匹配[ ]中列举的字符的其中一个
ret = re.findall('12[qaz]','13qwe12qwe')
print(ret)#['12q']

[^789]:不匹配789中的一个,^是非的意思 

ret = re.findall('12[^qaz]','13qwe12pqwe')
print(ret)#['12p']

 

\b匹配一个单词的边界(字母数字和非字母数字的边界)
\B匹配非单词的边界
ret = re.findall('oi\\b','oi.55llhihibye')
print(ret)#['oi']

即oi的右边不能有字母或数字! 

ret = re.findall('oi\\B','oi55llhihibye')
print(ret)#['oi']

即oi的右边必须有字母或数字! 

常用flags 

  •  re.IGNORECASE:缩写re.I                表示忽略大小写
ret = re.findall('m...e', 'cat and MOUSE')
print(ret)#[]
ret = re.findall('m...e', 'cat and mouse',re.IGNORECASE)
print(ret)#['mouse']
  •   re.VERBOSE:缩写re.X                     表示忽略模式中的空格,并可以使用#注释代码,提高    可读性
phoneRegex = re.compile(r'''( (\d{3}|\(\d{3}\))? # area code
(\s|-|\.)? # separator
\d{3} # first 3 digits
(\s|-|\.) # separator
\d{4} # last 4 digits
(\s*(ext|x|ext.)\s*\d{2,5})? # extension
)''',re.VERBOSE)

可以按意义,分部分写。一部分写一行,后面加上注释。执行时,注释会被忽略。同时,多余的空白也会被忽略。如果用以前的方式写,则不小心写的空白,可能会改变正则表达式的意义 

  •   re.DOTALL:缩写re.S                     表示使元字符也匹配换行符
a = """hhhhoirerej     
jjjioioeer"""
print(re.findall(r'oi.*oi',a))#[]
print(re.findall(r'oi.*oi',a,re.S))#['oirerej     \njjjioi']

match

re.match(pattern, string)# pattern  匹配的正则表达式 string  要匹配的字符串

re.match()必须从字符串开头匹配!match方法尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。 

a = re.match('bbbtest','bbbtestasdtest')
print(a)                             #返回一个匹配对象  <re.Match object; span=(0, 7), match='bbbtest'>
print(a.group())                     #返回test,获取不到则报错 bbbtest
print(a.span())           #返回匹配结果的位置,左闭右开区间 (0, 7)
print(re.match('test','atestasdtest'))  #返回None None

search 

匹配整个字符串,并返回第一个成功的匹配

sub

替换指定的字符串 

re.sub(pattern,repl,string)
#pattern:要替换的数据 repl:替换成什么 string:源数据
print(re.sub('cnm','hhhh','cnmcnms'))#hhhhhhhhs

split 

对字符串进行分割,并返回一个列表

s = "https:bbbsssd.com"
print(re.split("\.",s))           #以.号进行分割['https:bbbsssd', 'com']
print(re.split(":|\.",s))     #以:或者.进行分割['https', 'bbbsssd', 'com']
print(re.split(r",|:|-|%|\.",s))    #找不到的分隔符就忽略['https', 'bbbsssd', 'com']

贪婪 

python里的数量词默认是贪婪的,总是尝试尽可能的匹配更多的字符。python中使用?号关闭贪婪模式 

print(re.match(r"qq\d+","qq666666"))   #会尽可能多的去匹配\d<re.Match object; span=(0, 8), match='qq666666'>
print(re.match(r"qq\d+?","qq66666777"))  #尽可能少的去匹配\d<re.Match object; span=(0, 3), match='qq6'>

华山论剑

提取图片地址

import re
a='<img src="https://act-webstatic.mihoyo.com/hk4e/e20200928calculate/item_icon_u8f88e/32ea78b3df5ba600611c015475e648a4.png?x-oss-process=image%2Fresize%2Cw_104%2Fquality%2CQ_90%2Fformat%2Cwebp" class="recommend-popup__item-img">'
re = re.search("src=\"https.*\"",a)
print(re.group())#src="https://act-webstatic.mihoyo.com/hk4e/e20200928calculate/item_icon_u8f88e/32ea78b3df5ba600611c015475e648a4.png?x-oss-process=image%2Fresize%2Cw_104%2Fquality%2CQ_90%2Fformat%2Cwebp" class="recommend-popup__item-img"
#因为python是贪婪的
a='<img src="https://act-webstatic.mihoyo.com/hk4e/e20200928calculate/item_icon_u8f88e/32ea78b3df5ba600611c015475e648a4.png?x-oss-process=image%2Fresize%2Cw_104%2Fquality%2CQ_90%2Fformat%2Cwebp" class="recommend-popup__item-img">'
re = re.search(r'src="https\S+"', a)
if re:print(re.group())#src="https://act-webstatic.mihoyo.com/hk4e/e20200928calculate/item_icon_u8f88e/32ea78b3df5ba600611c015475e648a4.png?x-oss-process=image%2Fresize%2Cw_104%2Fquality%2CQ_90%2Fformat%2Cwebp"

 

 

 

 

 

 

 

 

 

相关文章:

正则表达式:文本处理中的瑞士军刀

正则表达式是用于提取字符串规律的规则&#xff0c;通过特定语法表达&#xff0c;以匹配符合该规律的字符串。它具有通用性&#xff0c;不仅适用于Python&#xff0c;也可用于其他编程语言。 下面我用Python的re模块来进行实战演示&#xff1a;&#xff08;记得import re&…...

WebSocket 入门案例

目录 WebSocket入门案例WebSocket-server新增项目:添加依赖:yml:启动类&#xff1a; frontend-server前端项目&#xff1a;添加依赖&#xff1a;添加yml&#xff1a;启动类&#xff1a;前端引入JS:前端页面&#xff1a;后端代码&#xff1a;测试&#xff1a; WebSocket 入门案…...

华为OD 最大社交距离(100分)【java】A卷+B卷

华为OD统一考试A卷+B卷 新题库说明 你收到的链接上面会标注A卷还是B卷。目前大部分收到的都是B卷。 B卷对应20022部分考题以及新出的题目,A卷对应的是新出的题目。 我将持续更新最新题目 获取更多免费题目可前往夸克网盘下载,请点击以下链接进入: 我用夸克网盘分享了「华为O…...

Nginx缓存

Nginx缓存 一般情况下系统用到的缓存有三种 服务端缓存&#xff1a;缓存存在后端服务器&#xff0c;如redis 代理缓存&#xff1a;缓存存储在代理服务器或中间件&#xff0c;内容从后端服务器获取&#xff0c;保存在本地 客户端缓存&#xff1a;缓存在浏览器 [ ] 什么时候会出现…...

Pyecharts绘图教程(2)—— 绘制多种折线图(Line)参数说明+代码实战

文章目录 &#x1f3af; 1 简介&#x1f3af; 2 图表配置项2.1 导入模块2.2 数据配置项2.3 全局配置项 &#x1f3af; 3 代码实战3.1 基础折线3.2 平滑曲线&#xff08;is_smooth&#xff09;3.3 阶梯折线&#xff08;is_step&#xff09;3.4 空值过渡&#xff08;is_connect_n…...

oracle实现搜索不区分大小写

<if test"code ! null and code ! ">and upper(code) like upper(%${code}%) </if>关键字upper...

C++中->与.的区别

在类中 在 C 中&#xff0c;-> 和 . 都可以用于访问类的成员变量和成员函数。但它们在使用上有一些区别&#xff1a; 1. 对于指针类型的对象&#xff0c;必须使用 -> 来访问其成员&#xff1b;而对于非指针类型的对象&#xff0c;则需要使用 . 。 2. -> 运算符在实…...

大语言模型(LLM)综述(二):开发大语言模型的公开可用资源

A Survey of Large Language Models 前言3. RESOURCES OF LLMS3.1 公开可用的模型CheckPoints或 API3.2 常用语料库3.3 库资源 前言 随着人工智能和机器学习领域的迅速发展&#xff0c;语言模型已经从简单的词袋模型&#xff08;Bag-of-Words&#xff09;和N-gram模型演变为更…...

【vSphere 8 自签名证书】企业 CA 签名证书替换 vSphere Machine SSL 证书Ⅳ—— 替换默认证书

目录 博文摘要6. 使用企业 CA 签发的 SSL 证书 替换 vSphere 默认 SSL 证书6.1 确认证书文件6.2 替换默认 vSphere 证书6.3 验证自签名证书6.4 补充说明 关联博文参考资料 博文摘要 博文主要描述了在 vCenter Server 8 上通过实用工具 certificate-manager 将 vSphere 默认 Ma…...

NI9234 4 通道, ±5 V, 24 位软件可选 IEPE 和 AC/DC模拟输入模块振动测试国产替代

NI的自动化测试和测量系统将助您打破桎梏&#xff0c;化不可能为可能。让我们携手合作&#xff0c;选择最适合您的硬件、软件和服务组合&#xff0c;为您提供全副武装&#xff0c;助您成就非凡。 购买NI的产品或服务&#xff0c;并非只是单纯的一次性交易行为。如果您有任何疑…...

宁波市:做大做强跨境电商 赋能外贸创新发展

近日&#xff0c;全国政协第十四届常委会第二次会议专题研究“构建新发展格局&#xff0c;推进中国式现代化”议题&#xff0c;市政协主席徐宇宁参加“推动高水平对外开放”专题小组讨论&#xff0c;全国政协副主席蒋作君到会听取发言&#xff0c;国家发改委、商务部相关司局负…...

为什么这些网站都在使用CFCA证书

在今天的数字时代&#xff0c;保障数据的安全至关重要&#xff0c;尤其是对于金融机构、政府部门和大型企业等组织而言。证书颁发机构在这一领域扮演着关键的角色&#xff0c;而CFCA&#xff08;中国金融认证中心&#xff09;证书已经脱颖而出&#xff0c;展现了其与其他证书的…...

Java编程规范(命名规则),Java程序的运行过程(执行流程)分析

编程规范是对编程的一种约定&#xff0c;主要作用是增强代码的可读性和可维护性&#xff0c;便于代码重用。 首先要求程序中的各个要素都遵守命名规则&#xff0c;然后在编码中严格按照编码格式编写代码。命名规则包括以下几点。 包的名称由一个小写字母序列组成。类的名称由大…...

layui框架实战案例(21):layui table单元格显示图片导致复选框冗余的解决方案

图片自适应表格CSS 为防止单元格内的图片不能正常显示&#xff0c;需本地重写CSS。 /*layui-table图片自适应*/ .layui-table-cell {height: auto;line-height: 20px;}.layui-table-cell img {height: 50%;max-width: 50%; }列代码 , cols: [[{type: checkbox,fixed:left, w…...

指针常量和常量指针

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家来访。 指针常量和常量指针光是这名字就让人头疼了。更何况还有细节问题要理清楚。 正文 命名 其实我…...

GitLab-访问返回403 forbidden问题处理

访问gitlab时报错forbidden 一般访问量大&#xff0c;密码错误频率高的时候&#xff0c;gitlab防爆机制启动了&#xff0c;对IP做了封禁&#xff0c;导致某些IP访问的是否返回 403 forbidden 1. 查看被封的IP /opt/gitlab/embedded/bin/redis-cli -s /var/opt/gitlab/redis/red…...

快来get策略模式,告别编程困惑,轻松变身编程高手✨

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! ​ 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一…...

UPS负载箱的工作原理是什么?

UPS负载箱&#xff08;Uninterruptible Power Supply Load Bank&#xff09;内部包含一组电阻器&#xff0c;通过调节电阻值来模拟不同负载条件。当UPS供电时&#xff0c;电阻器会吸收一定的电能&#xff0c;从而模拟实际负载对UPS的需求。UPS负载箱配备了控制系统&#xff0c;…...

深度学习八股文: 模型训练全过程及各阶段的原因

深度学习模型的训练全过程通常包括以下步骤&#xff1a; 数据准备&#xff1a; 首先&#xff0c;需要准备用于训练的数据集。数据集应包含输入特征&#xff08;通常是数值或图像数据&#xff09;和相应的目标标签。数据通常需要被分为训练集、验证集和测试集&#xff0c;以便评…...

CY3-NHS ester良好的光稳定性介绍1032678-38-8

CY3-NHS ester通常表现出良好的光稳定性&#xff0c;这使得它在长时间的荧光成像和实验中非常有用。以下是关于CY3-NHS ester良好光稳定性的一些介绍&#xff1a; 1.抗光漂白性能&#xff1a;CY3-NHS ester通常对光漂白表现出相对高的抵抗力。这意味着在持续激发下&#xff0c…...

革命性监控工具ebpf_exporter:深度解析内核性能的终极指南

革命性监控工具ebpf_exporter&#xff1a;深度解析内核性能的终极指南 【免费下载链接】ebpf_exporter Prometheus exporter for custom eBPF metrics 项目地址: https://gitcode.com/gh_mirrors/eb/ebpf_exporter ebpf_exporter是一款基于eBPF技术的Prometheus exporte…...

手把手教你用Walkie-Talkie数据集复现网站指纹攻击论文(附内存溢出解决方案)

实战指南&#xff1a;基于Walkie-Talkie数据集构建网站指纹攻击模型的完整流程 当研究资源受限时&#xff0c;如何用单一可用数据集完成前沿论文的完整复现&#xff1f;本文将带你从零开始&#xff0c;使用Walkie-Talkie数据集构建一个完整的网站指纹识别系统。不同于常规教程&…...

金融建模新思路:如何用连续时间随机游走(CTRW)预测股价波动?

金融建模新思路&#xff1a;如何用连续时间随机游走&#xff08;CTRW&#xff09;预测股价波动&#xff1f; 金融市场的高频波动常让传统模型失效。2023年美股"闪电暴跌"事件中&#xff0c;布朗运动模型预测偏差达47%&#xff0c;而采用CTRW框架的机构误差控制在12%以…...

CSS如何提高团队协作效率_推广BEM规范减少样式沟通成本

BEM命名能减少CSS样式扯皮&#xff0c;因其类名明确表达“是什么、在哪用、干什么”&#xff0c;如header__logo--dark精准锁定作用域和上下文&#xff0c;避免复用冲突与逻辑覆盖。为什么BEM命名能减少CSS样式扯皮因为类名本身说了清楚“这是啥、在哪用、干啥的”&#xff0c;…...

Wan2.2-I2V-A14B文生视频实战:教育课件动态演示视频批量生成案例

Wan2.2-I2V-A14B文生视频实战&#xff1a;教育课件动态演示视频批量生成案例 1. 教育视频制作的痛点与解决方案 传统教育课件视频制作面临三大难题&#xff1a;一是专业制作成本高&#xff0c;需要聘请视频团队&#xff1b;二是内容更新迭代慢&#xff0c;无法快速响应教学需…...

Java 从入门到精通(十四):多线程入门,为什么程序一并发就开始变得“不听话”?

Java 从入门到精通&#xff08;十四&#xff09;&#xff1a;多线程入门&#xff0c;为什么程序一并发就开始变得“不听话”&#xff1f; 前一篇我们把 NIO 这条线讲清楚了&#xff1a;为什么 Java 后来不满足于传统 IO&#xff0c;为什么会引入 Path、Files、Buffer、Channel、…...

前端交互优化方案

前端交互优化方案&#xff1a;提升用户体验的关键 在当今快节奏的数字化时代&#xff0c;用户对网页和应用的交互体验要求越来越高。前端交互优化不仅能提升用户满意度&#xff0c;还能直接影响转化率和业务增长。无论是减少加载时间、优化动画效果&#xff0c;还是提升操作的…...

Phi-4-mini-reasoning解决软件开发中的复杂依赖冲突问题

Phi-4-mini-reasoning解决软件开发中的复杂依赖冲突问题 1. 引言&#xff1a;依赖冲突的日常困扰 每个开发者都经历过这样的噩梦&#xff1a;项目跑得好好的&#xff0c;突然因为引入一个新库导致整个环境崩溃。控制台里密密麻麻的报错信息&#xff0c;像是一道无解的谜题。特…...

图像处理中卷积核的实战应用指南

1. 卷积核入门&#xff1a;图像处理的魔法滤镜 第一次接触卷积核时&#xff0c;我把它想象成Photoshop里的滤镜工具。就像给照片加磨皮效果一样&#xff0c;3x3或5x5的小矩阵能在图像上滑动&#xff0c;实时改变像素的呈现方式。但和普通滤镜不同&#xff0c;卷积核的每个数字都…...

5分钟制作启动盘:EtchDroid安卓USB镜像写入工具全攻略

5分钟制作启动盘&#xff1a;EtchDroid安卓USB镜像写入工具全攻略 【免费下载链接】EtchDroid An application to write OS images to USB drives, on Android, no root required. 项目地址: https://gitcode.com/gh_mirrors/et/EtchDroid 当你的电脑突然无法启动&#…...