Python中re模块常用方法总结分析
作者:季布, 发布时间:2022-10-27 14:40:20
re.findall()
在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配的,则返回空列表。
语法格式:
re.findall(pattern, string, flags=0)
参数:pattern
:匹配字符串的正则。string
:待匹配的字符串。
示例:
需求:查找字符串中的所有数字
result = re.findall(r'\d+','1python2hello3')
print(result)
结果
['1', '2', '3']
result = re.findall(r'p%','helloP%ython')
print(result)
结果
[] #因为要匹配的字符串P% 和正则p%不匹配,所以返回空
result = re.findall(r'p%','helloP%ython',re.I)
print(result)
结果
[P%]
re.sub()
语法:
re.sub(pattern, repl, string, count=0, flags=0)
参数:pattern
: 正则中的模式字符串。repl
: 替换的字符串,也可为一个函数。string
: 要被查找替换的原始字符串。count
: 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。
result = re.sub(r'python','world','hellopython')
print(result)
结果
helloworld
repl 参数是一个函数
#需求:将匹配到结果中小于4的替换成8,大于4的替换成9
import re
def modify(value):
matched = value.group()
if int(matched) <= 4:
return '8'
else:
return '9'
str = 'ab12cd34ef567'
result = re.sub('\d', modify, str)
print(result )
结果
ab88cd88ef999
使用场景:可以对匹配成功要替换的部分做操作
re.compile
当我们在Python中使用正则表达式时,re模块内部:
1)编译正则表达式,如果正则表达式的字符串本身不合法,会报错;
2)用编译后的正则表达式去匹配字符串。
那么如果一个正则表达式要重复使用几千次,出于效率的考虑,我们是不是应该先把这个正则先预编译好,接下来重复使用时就不再需要编译这个步骤了,直接匹配,提高我们的效率
compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
语法格式为:
re.compile(pattern[, flags])
参数:pattern
: 一个字符串形式的正则表达式flags
: 可选,表示匹配模式,比如忽略大小写,多行模式等,
str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups()
print(result)
print(result1)
结果
ab12
('ab', '12')
re.match
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
语法
re.match(pattern, string, flags=0)
参数:pattern
:匹配的正则表达式string
:要匹配的字符串。flags
: 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
str = 'ab12cd34ef567'
info = re.compile(r'([a-z]{2})(\d{2})')
result = info.match(str).group()
result1 = info.match(str).groups()
print(result)
print(result1)
结果
ab12
('ab', '12')
str1 = '0b12cd34ef567'
result1 = info.match(str1).group()
print(result1)
结果: 会报错
AttributeError: 'NoneType' object has no attribute 'group'
re.search
re.search 扫描整个字符串并返回第一个成功的匹配。
参数:pattern
:匹配的正则表达式string
:要匹配的字符串。flags
:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
str = 'ab12cd34ef567'
info = re.compile(r'([0-9]{2})')
result = info.search(str).group()
print(result)
结果
12
re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;
re.search匹配整个字符串,直到找到一个匹配。
re.split
split 方法按照能够匹配的子串将字符串分割后返回列表
语法
re.split(pattern, string[, maxsplit=0, flags=0])
参数:pattern
: 匹配的正则表达式string
:要匹配的字符串。flags
:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等
str = 'abc def g hi'
result = re.split('\W+',str)
print(result)
结果
['abc', 'def', 'g', 'hi']
来源:https://blog.csdn.net/weixin_47906106/article/details/120054698


猜你喜欢
- 前言 作者: 罗昭成PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://note.youdao.com/not
- 越简单越丰富——极简网页设计视觉呈现技巧如何让杂乱又咄咄逼人的网页变得轻薄简洁而美观,又需保留完整功能、同时很好的区分出重点模块?这往往是让
- 前提条件,percona 5.6版本,事务隔离级别为RRmysql> show create table test_autoinc_l
- 在一些情况下,MySQL可以直接使用索引来满足一个 ORDER BY 或 GROUP BY 子句而无需做额外的排序。尽管 ORDER BY
- Python 的 Queue 模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列Lifo
- 使用下面的命令检查是否安装有MySQL Server[root@localhost etc]# rpm -qa | grep mysql /
- 今天在 ajaxian 上看到一篇文章,名为 Five Ajax Anti-pattern ,觉得讲得比较有道理,现粗略翻译一下,加一些自己
- 先下载:http://signup.qq.com/js/a.js用 IntelliJ IDEA 格式化代码:var naa = true;O
- 生活中有很多需要用到关联图的地方,至少我认为的是这样的图:https://www.echartsjs.com/examples/zh/edi
- 代码如下:CREATE TABLE [dbo].[TbGuidTable]( [TableName] [varchar](50) NOT N
- python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法
- Node.js中的事件触发器所引发的思考今天在看 Node.js 文档的时候讲到事件触发器,其中的 emit 方法让我想到了 Vue 中的自
- 生成全局ID的方法很多, 这里记录下一种简单的方案: 利用mysql的自增id生成全局唯一ID.1. 创建一张只需要两个字段的表:CREAT
- 问题描述(以下讨论范围仅限Windows环境): D:\develop\ide\mysql\mysql5.5\bin> mysql -
- 一.配置版本Java JDK 1.8.0_111Python 3.9.6Spark 3.1.2Hadoop 3.2.2二.配置环境 
- 本文实例讲述了Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能。分享给大家供大家参考,具体如下:因为需要使用
- 1. SeriesSeries 是一个类数组的数据结构,同时带有标签(lable)或者说索引(index)。1.1 下边生成一个最简单的Se
- 在SQL Server中联机丛书是这样说的: SQL Server timestamp 数据类型与时间和日期无关。SQL Server ti
- 2.1数据的爬取代码:import pandas as pddata=pd.read_csv("example_data.csv&
- key_len的含义在MySQL中,可以通过explain查看SQL语句所走的路径,如下所示:mysql> create table