详解python之re库使用方法2

news2024/9/28 11:17:06

目录

  • 参考资料
  • 前言
  • 二、使用 re 模块匹配字符串
    • 0. re 子函数
  • 1. re.split()
    • 1.实例演示
  • 2. re.search() 和 re.match()对比
  • 3.re.search()
  • 4.re.findall()
  • 5.re.escape()
  • 6. 正则表达式的简单说明
  • 8. re.compile
  • re.match() 方法进行匹配
    • 参考链接:

参考资料

[1] Python之正则表达式细讲 2023.2;
[2] Python之re库用法细讲 2023.3;
[3]
一、使用 re 模块的前期准备工作
二、使用 re 模块匹配字符串

  1. 使用 match() 方法进行匹配
  2. 使用 search() 方法进行匹配
  3. 使用 findall() 方法进行匹配
    三、使用 re 模块替换字符串
    四、使用 re 模块分割字符串

前言

Python语言专门提供了 re 模块,用于实现正则表达式的操作。我们使用较多的场景是,使用 re 模块提供的方法(如 search()、match()、findall()等)进行字符串处理,也可以先使用 re 模块的 compile() 方法将模式字符串转换为正则表达式对象,然后再使用该正则表达式对象的相关方法来操作字符串,接下来就跟大家介绍一下 re 模块的详细用法。

二、使用 re 模块匹配字符串

re 模块中提供了 match()、search() 和 findall() 等方法专门用来匹配字符串,可以从海量数据中精确筛选出需要的对象,我们逐一来看看每种方法的具体实现。

  1. 使用 match() 方法进行匹配
      match() 方法用于从字符串的开始处进行匹配,如果在起始位置匹配成功,则返回 Match 对象,否则返回 None。其语法格式如下:
re.match(pattern, string, [flags])

0. re 子函数

re 模块中提供了 match()search()findall() 等方法专门用来匹配字符串,可以从海量数据中精确筛选出需要的对象。
在这里插入图片描述

1. re.split()

1.实例演示

实例 1

import re
s = 'abc,  abc,  defg,  dds'
re.split('\W+', s)  # 说明:\W 匹配任何非单词字符,任何字母

# 运行结果:
['abc', 'abc', 'defg', 'dds']

实例 2

import re
s = 'abc,  abc,  defg,  dds'
re.split('(\W+)', s)  # 说明:如果加上括号或'[]',结果会同时返回去掉的值

# 运行结果:
['abc', ',  ', 'abc', ',  ', 'defg', ',  ', 'dds']

实例 3

import re
s = 'abc,  abc,  defg,  dds'
re.split('(\W+)', s, 1)  # 说明:当前字符串只切分1次

运行结果:
['abc', ',  ', 'abc,  defg,  dds']

实例 4

import re
s = 'abc,  abc,  defg,  dds'
re.split('wxy*', s)  # 说明:没有可匹配的项,返回原来的字符串。

运行结果:
['abc,  abc,  defg,  dds']

实例 5

import re
line = 'aaa bbb ccc;ddd   eee,fff'
re.split(r'[;,]',line)  # 两个字符以上切割需要放在 [ ] 中

运行结果:
['aaa bbb ccc', 'ddd   eee', 'fff']

实例 6

import re
line = 'aaa bbb ccc;ddd   eee,fff'
re.split(r'[;,\s]',line)  # 所有空白字符切割

运行结果:
['aaa', 'bbb', 'ccc', 'ddd', '', '', 'eee', 'fff']

实例 7

import re

file_name = 'F:\\02-data\\data_standar\\0224整年-Exported.csv'
print(re.split('[\\\, .]', file_name))

['F:', '02-data', 'data_standar', '0224整年-Exported', 'csv']

实例8

>>> re.split(r'\W+', 'Words, words, words.')
# ['Words', 'words', 'words', '']
>>> re.split(r'(\W+)', 'Words, words, words.')
# ['Words', ', ', 'words', ', ', 'words', '.', '']
>>> re.split(r'\W+', 'Words, words, words.', 1)
# ['Words', 'words, words.']
>>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
# ['0', '3', '9']
>>> re.split(r'(\W+)', '...words, words...')
# ['', '...', 'words', ', ', 'words', '...', '']
>>> re.split(r'\b', 'Words, words, words.')
# ['', 'Words', ', ', 'words', ', ', 'words', '.']

实例9

>>> re.split(r'\W*', '...words...')
# ['', '', 'w', 'o', 'r', 'd', 's', '', '']
>>> re.split(r'(\W*)', '...words...')
# ['', '...', '', '', 'w', '', 'o', '', 'r', '', 'd', '', 's', '...', '', '', '']
str(re.split('[-.]', 'filter_Molas_(2019-11-15_2020-03-28)_高层研究-山东泰山队.csv'))
Out[4]: "['filter_Molas_(2019', '11', '15_2020', '03', '28)_高层研究', '山东泰山队', 'csv']"
str(re.split('[-.]', 'filter_Molas_(2019-11-15_2020-03-28)_高层研究-山东泰山队.csv')[-2])
Out[5]: '山东泰山队'

实例10

案例:用split()函数分割一个字符串并转换成列表


import re
s = "abcabcacc"
l = re.split("b", s)
print('运行结果为:', l)

#运行结果为:['a', 'ca', 'cacc']
re.split('\\\\', files[0]) 
Out[12]: 
['E:',
 '02-data',
 '02-profile',
 '152-csv格式文件',
 'filter-Exported.csv']
re.split('\\\\', files[0]) [-1]
Out[13]: 'filter-Exported.csv'
files[0]
Out[14]: 'E:\\02-data\\02-wind_profile\\152-csv格式文件\\filter-Exported.csv'

2. re.search() 和 re.match()对比

对id这一列,提取前面的数字部分

b = data.loc[:, 'id'].apply(lambda x: re.search('\d+', x).group())

语法

re.search(pattern, string, flags=0)

>>> re.match("c", "abcdef")    # No match
>>> re.search("c", "abcdef")   # Match
<re.Match object; span=(2, 3), match='c'>
>>> re.match("c", "abcdef")    # No match
>>> re.search("^c", "abcdef")  # No match
>>> re.search("^a", "abcdef")  # Match
<re.Match object; span=(0, 1), match='a'>
>>> re.match('X', 'A\nB\nX', re.MULTILINE)  # No match
>>> re.search('^X', 'A\nB\nX', re.MULTILINE)  # Match
<re.Match object; span=(4, 5), match='X'>

3.re.search()

>>> m = re.search(r'(?<=-)\w+', 'spam-egg')  # r'(?<=-)\w+',表示识别'<=-'这几个符号后边的单词或者数字,是'egg'
>>> m.group(0)
'egg'
>>> import re
>>> m = re.search('(?<=abc)def', 'abcdef')
>>> m.group(0)
'def'
ids_list = data.loc[:, 'id'].apply(lambda x: re.search('\d+', x).group())

x列元素为’‘00005’,‘‘00228’,……,‘‘00263’,带一个单引号,匹配后的结果为’00005’,‘00228’,……,‘00263’

4.re.findall()

>>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
['foot', 'fell', 'fastest']
#r'\bfoo\b' matches 'foo', 'foo.', '(foo)', 'bar foo baz' but not 'foobar' or 'foo3'
>>> re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
[('width', '20'), ('height', '10')]

在这里插入图片描述

5.re.escape()

>>> print(re.escape('https://www.python.org'))
https://www\.python\.org

>>> legal_chars = string.ascii_lowercase + string.digits + "!#$%&'*+-.^_`|~:"
>>> print('[%s]+' % re.escape(legal_chars))
[abcdefghijklmnopqrstuvwxyz0123456789!\#\$%\&'\*\+\-\.\^_`\|\~:]+

>>> operators = ['+', '-', '*', '/', '**']
>>> print('|'.join(map(re.escape, sorted(operators, reverse=True))))
/|\-|\+|\*\*|\*

6. 正则表达式的简单说明

正则表达式,由普通字符和元字符组成
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8. re.compile

在这里插入图片描述

re.match() 方法进行匹配

参考链接:

[1] python 中re.split()的用法 2019.9
[2] 百科:python正则表达式;
[3] Python 中re.split()方法 2019.9
[4] Python正则表达式 ;
[5] re — Regular expression operations¶ ;

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

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

相关文章

Appium: Windows系统桌面应用自动化测试(二)

Appium: Windows系统桌面应用自动化测试二 一、关于自动化过程中&#xff0c;打开了应用&#xff0c;但获取不到操作句柄的问题1、问题描述2、问题分析3、问题解决 二、尝试回归问题本身&#xff0c;去解决问题1、目标应用日志3、查看WinAppDriver日志&#xff08;1&#xff09…

YOLO系列正负样本分配策略

1、YOLOv3 使用MaxIoUAssigner策略来给gt分配样本&#xff0c;基本上保证每个gt都有唯一的anchor对应&#xff0c;匹配的原则是该anchor与gt的IOU最大且大于FG_THRESH&#xff0c;这种分配制度会导致正样本比较少&#xff0c;cls和bbox分支训练起来可能比较慢。在剩余的anchor…

(三)Flask前置知识栈——装饰器

在后续的讲解中&#xff0c;对大家对装饰器的掌握程度要求较高&#xff0c;所以此文来深入讲解一下&#xff0c;有看过《Python全栈系列教程》专栏的小伙伴可能会说&#xff0c;装饰器已经出过文章讲的很详细了。饶是如此&#xff0c;深究过装饰器的小伙伴们就权当复习一遍&…

荣耀笔记本怎么重装Win10系统?荣耀笔记本用U盘重装系统Win10教程

随着时间的推移&#xff0c;荣耀笔记本系统可能会变得缓慢、不稳定&#xff0c;甚至出现故障&#xff0c;这时候&#xff0c;重装操作系统就成为了一个必要的选择&#xff0c;那么怎么给荣耀笔记本电脑重装Win10系统呢&#xff0c;可以按照系统之家小编分享的荣耀笔记本用U盘重…

提升矿井水质安全性:矿井水除氟领域的应用与优势

引言 随着工业化进程的推进&#xff0c;矿井水中含有过量的氟离子已成为一个严重的环境问题。高浓度的氟离子对人体健康和生态环境都具有危害。因此&#xff0c;矿井水除氟工艺的研究和应用变得至关重要。 当废水中的氟超标超过了环保标准时&#xff0c;可能会对环境和人类健康…

【AUTOSAR】VCU开发实际项目讲解(一)----VCU系统边界条件

VCU系统边界条件 VCU基本性能参数 序号 项目 参考指标 试验方法或评定指标 1 外形尺寸 长244mm*宽156mm*41.4mm&#xff08;参考尺寸&#xff09; 2 工作电压 正常工作电压 9V-16V CAN通讯电压 8V-18V 不保证功能 &#xff1c;8V or &#xff1e;18V 3 过压保…

基于深度学习的高精度老虎检测识别系统(PyTorch+Pyside6+YOLOv5模型)

摘要&#xff1a;基于深度学习的高精度老虎检测识别系统可用于日常生活中或野外来检测与定位老虎目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的老虎目标检测识别&#xff0c;另外支持结果可视化与图片或视频检测结果的导出。本系统采用YOLOv5目标检测模型…

host碰撞,利用host碰撞突破访问边界

文章目录 host 碰撞漏洞原理漏洞利用步骤漏洞复现 host 碰撞 直接利用ip访问显示的是403 404 400 500&#xff0c;但是用域名请求就会返回正常业务。当然在排除WAF作祟下&#xff08;有一些WAF它会要求使用域名访问&#xff0c;使用IP的会出现WAF的拦截界面&#xff09;&#…

记录node.js+vue-elementui-admin的后台管理系统登录传参问题

前言&#xff1a;本来想用Node做后端&#xff0c;vue-element-admin做前端来练习一下技术&#xff0c;了解一下开发的过程 // 用户登录处理函数 exports.login (req, res) > {console.log(req.body)const userinfo req.bodyconst sql select * from user where username…

迪赛智慧数——柱状图(象形动态图):高考填报专业考虑的因素

效果图 填报志愿是高考后的一大重要环节&#xff0c;你的职业生涯就在这里起航了。那么&#xff0c;应该怎么填报志愿呢&#xff1f;高考填报专业考虑的因素很多&#xff0c;过半的人会考虑专业就业前景及薪资&#xff0c;其次是个人兴趣和是否为双一流建设学科。 数据源&…

Spring中bean使用方法

Spring框架是一个非常重要的开发工具&#xff0c;它提供了丰富的功能和模块&#xff0c;其中核心的概念之一就是Spring Bean。Spring Bean是Spring IoC容器中的一个对象&#xff0c;它负责管理一个Java对象的生命周期以及依赖注入。下面我将通过互联网场景下的相关背景内容来阐…

[SSM]MyBatis基础

目录 一、MyBatis概述 1.1框架&#xff08;framework&#xff09; 1.2三层架构 1.3JDBC的不足 1.4了解MyBatis 二、MyBatis入门程序 2.1resources目录 2.2开发步骤 2.3从XML中构建SqlSessionFactory 2.4mybatis中有两个主要的配置文件 2.5关于第一个程序的细节 2.6关…

Linux read的核心函数generic_file_buffered_read

内核&#xff1a;5.9.0 流程图 generic_file_buffered_read一种调用路径&#xff08;cat某个文件触发&#xff09;&#xff1a; #0 ondemand_readahead (mapping0xffff888005c61340, ra0xffff888005927598, filp0xffff888005927500, hit_readahead_markerfalse, index0, req…

Linux历史及环境搭建(VMware搭建CentOS7环境以及使用XShell连接Vmware)

Linux历史及环境搭建 1.Linux历史1.1 UNIX发展的历史1.2 Linux发展历史1.2.1 开源1.2.2 官网1.2.3 发行版本 2.VMware配置CentOS7环境2.1 CentOS下载2.2 配置环境2.3 切换国内阿里源2.4 无图形化界面开机2.5 使用XShell连接VMware 结语 1.Linux历史 在这里简要介绍Linux的发展…

全局配置cnpm淘宝镜像

node是一个非常好用的项目管理工具 但这是一个国外的工具 我们直接执行npm命令因为是用的国外的镜像 会比较慢 那么 我们就可以用cnpm来处理 但前提是你要搭建好环境 我们先打开终端 安装 淘宝镜像 输入 npm install -g cnpm --registryhttps://registry.npm.taobao.org然后 n…

最强DETR+YOLO,三阶段目标检测器DEYOv2正式发布,性能炸裂!

导读 目标检测算法是CV领域非常重要的算法,去年二阶段DEYO的发布,提出了很多的创新点,而本文端到端的 论文链接:https://arxiv.org/pdf/2306.09165.pdf 本文提出了一种称为DEYOv2的新型目标检测器,这是第一版DEYO(DETR with YOLO)模型的改进版本。与前代类似,DEYOv2采…

企企通创始人CEO徐辉:数字生态与数字化供应链如何连通

6月16日&#xff0c;2023年华映资本年度大会在杭州成功举办。 2023年华映资本年度大会以“无限新成皆繁星”为主题。在为期一天的峰会中&#xff0c;华映资本合伙人团队、投资团队、华映资本被投企业创始人以及行业嘉宾等50位嘉宾汇聚一堂&#xff0c;既探讨行业当下科技强共识…

硬件可信方案-EVITA HSM

信息安全中的HSM 和 SHE 两个概念有什么区别和相同的地方&#xff1f; HSM&#xff0c;硬件安全模块&#xff0c;Hardware Security ModuleSHE&#xff0c;安全硬件扩展&#xff0c;Secure Hardware Extension EVITA研究项目的目标是为汽车车载网络设计、验证一个体系架构&am…

STM32单片机双通道FM调频数字音量收音机可存台音量可调TEA5767

实践制作DIY- GC0148---双通道FM调频数字音量收音机 基于STM32单片机设计---双通道FM调频数字音量收音机 二、功能介绍&#xff1a; STM32F103C系列最小系统板TEA5767 收音机模块LCD1602显示器喇叭功放模块数字电位器多个按键&#xff08;存储、S1、S2、S3、频率-0.1MHz、频率…

【AUTOSAR】VCU开发实际项目讲解(二)----VCU软件与结构描述

VCU软件描述 VCU软件架构主要分为底层软件驱动和应用层控制策略&#xff0c;其中应用层控制策略通过基于模型的开发&#xff0c;自动生成代码并可与底层驱动软件实现无缝连接。 VCU软件通过BOOTLOADER和CAN总线进行更新刷写。 标定及诊断 支持CCP/XCP标定协议支持UDS诊断协议及…