python3正则re的使用
python3正则re的使用
- 一、正则
- 1.正则表达式定义
- 2.目的和特点
- 3.常用的正则表达式
- 4.贪婪模式与非贪婪模式
- 5.反斜杠
- 二、re模块
- 1.match
- 2.search
- 3.split,findall,finditer三个方法
- 4.sub
一、正则
1.正则表达式定义
正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。(在Python中)它内嵌在Python中,并通过 re 模块实现。正则表达式模式被编译成一系列的字节码,然后由用 C 编写的匹配引擎执行。
2.目的和特点
给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
- 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”):
- 可以通过正则表达式,从字符串中获取我们想要的特定部分。
正则表达式的特点是:
灵活性、逻辑性和功能性非常强;
可以迅速地用极简单的方式达到字符串的复杂控制。
由于正则表达式主要应用对象是文本,因此它在各种文本编辑器场合都有应用,小到著名编辑器EditPlus,大到Microsoft Word、Visual Studio等大型编辑器,都可以使用正则表达式来处理文本内容。
3.常用的正则表达式
更多详情查看百度百科-正则表达式
4.贪婪模式与非贪婪模式
正则表达式通常用于在文本中查找匹配的字符串。Python里数量词默认是贪婪的(在少数语言里也可能是默认非贪婪),总是尝试匹配尽可能多的字符;非贪婪的则相反,总是尝试匹配尽可能少的字符。例如:正则表达式"ab*“如果用于查找"abbbc”,将找到"abbb"。而如果使用非贪婪的数量词"ab*?",将找到"a"。
5.反斜杠
与大多数编程语言相同,正则表达式里使用"“作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符”",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,这个例子中的正则表达式可以使用r"\“表示。同样,匹配一个数字的”\d"可以写成r"\d"。有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
二、re模块
1.match
- match(string[, pos[, endpos]]) | re.match(pattern, string[, flags]):
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。
属性:
string: 匹配时使用的文本。
re: 匹配时使用的Pattern对象。
pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。
lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
方法:
group([group1, …]):
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
groups([default]):
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
start([group]):
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。
end([group]):
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。
span([group]):
返回(start(group), end(group))。
expand(template):
将匹配到的分组代入template中然后返回。template中可以使用\id或\g、\g引用分组,但不能使用编号0。\id与\g是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符’0’,只能使用\g<1>0。
import reret1 = re.match('t.{6}w', 'taaa333w123')
try:print('匹配到的数据是:', ret1.group()) # 匹配的是一个group
except:print('没有匹配到数据')
2.search
- search(string[, pos[, endpos]]) | re.search(pattern, string[,
flags]):
这个方法用于查找字符串中可以匹配成功的子串。从string的pos下标处起尝试匹配pattern,如果pattern结束时仍可匹配,则返回一个Match对象;若无法匹配,则将pos加1后重新尝试匹配;直到pos=endpos时仍无法匹配则返回None。
pos和endpos的默认值分别为0和len(string));re.search()无法指定这两个参数,参数flags用于编译pattern时指定匹配模式。
ret5 = re.search('^[0-9].*', '1hello python') # ^代表以什么开头
print(ret5.group())
3.split,findall,finditer三个方法
- split(string[, maxsplit]) | re.split(pattern, string[, maxsplit]):
- findall(string[, pos[, endpos]]) | re.findall(pattern, string[, flags]):
- finditer(string[, pos[, endpos]]) | re.finditer(pattern, string[, flags])?*
split类似string中的split方法,不多解释
findall()方法搜索string,以列表形式返回全部能匹配的子串。 实例:
import rep = re.compile(r'\d+')
print(p.findall('one1two2three3four4'))
输出
['1', '2', '3', '4']
finditer()方法搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。实例:
import rep = re.compile(r'\d+')
for m in p.finditer('one1two2three3four4'):print(m.group(),)
输出
1
2
3
4
4.sub
- sub(repl, string[, count]) | re.sub(pattern, repl, string[, count]):
使用repl替换string中每一个匹配的子串后返回替换后的字符串。
当repl是一个字符串时,可以使用\id或\g、\g引用分组,但不能使用编号0。
当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。
count用于指定最多替换次数,不指定时全部替换。
import rep = re.compile(r'(\w+) (\w+)')
s = 'i say, hello world!'print(p.sub(r'\2 \1', s))def func(m):return m.group(1).title() + ' ' + m.group(2).title()print(p.sub(func, s))
输出
say i, world hello!
I Say, Hello World!
python3正则re的使用相关推荐
- Python2和Python3正则匹配中文时的编码问题
Python2和Python3正则匹配中文时的编码问题 我们都会遇到这样的人,他们说话时是中文英文穿插使用的.也就是一句话中有中文也有英文,很多时候没有办法避免,尤其是说一些专业术语时,当然也有纯个人 ...
- python3+正则(re)增量爬虫爬取笔趣阁小说( 斗罗大陆IV终极斗罗)
python3+re 爬虫爬取笔趣阁小说 斗罗大陆IV终极斗罗 爬取前准备 导入的模块 分析 正则的贪婪与非贪婪 附完整代码示例 爬取前准备 导入的模块 import redis #redis数据库 ...
- Python3 正则相关
一.简述 正则表达式的作用是检查一个字符串是否与某种模式匹配.compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象.该对象拥有一系列方法用于正则表达式匹配和替换. ...
- python3 正则 验证邮箱手机
邮箱名称部分为: [a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+){0,4} 域名部分: [a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+ 连起来 ^[a-zA-Z0 ...
- python3 正则 去除 html标签、提取正文内容_Python通过正则表达式去除(过滤)HTML标签,提取文字...
# -*- coding: utf-8-*- import re ##过滤HTML中的标签 #将HTML中标签等信息去掉 #@param htmlstr HTML字符串. def filter_tag ...
- python3 正则匹配特殊符号_Python3 正则表达式特殊符号及用法(详细列表)
字符含义 .表示匹配除了换行符外的任何字符注:通过设置 re.DOTALL 标志可以使.匹配任何字符(包含换行符) |A | B,表示匹配正则表达式 A 或者 B ^1. (脱字符)匹配输入字符串的开 ...
- python3中find函数的用法_Python3正则匹配re.split,re.finditer及re.findall函数用法详解...
本文实例讲述了Python3正则匹配re.split,re.finditer及re.findall函数用法.分享给大家供大家参考,具体如下: re.split re.finditer re.finda ...
- python3默认编码格式_python3 中文乱码与默认编码格式设定方法
python默认编码格式是utf-8.在python2.7中,可以通过sys.setdefaultencoding('gbk')设定默认编码格式,而在python3.3中sys.setdefaulte ...
- Python3正则表达式(慢慢更新中~)
说明: 在python中,先是正则基本理论和字符代表意思,接着是python3中re的实操正则模块 理论: 一.元字符 二.限定符 三.字符类 四.排除字符 五.选择字符 六.转义字符 ...
- python提取日期中的年月_python3 正则提取年月日、年月、年思路
python3 正则提取年月日.年月.年思路 使用到知识点:[] 用来表示一组字符串 () 对正则表达式分组并记住匹配的文本 [0-9] 匹配任何数字 \d 匹配一个数字字符, ...
最新文章
- miui12 android版本,miui12基于安卓几版本开发的?miui12是安卓11吗
- 服务器断电重启修复,WIN取消100M隐藏分区、异常断电后绕过修复模式
- 大型网站演化发展历程之三
- java之jsp页面语法
- ubuntu nfs linux,Ubuntu的NFS功能配置
- radiobutton 设置单选项目标
- Why do people love certain websites and web products?
- sonar-runner命令模式运行sonar
- python调用有道翻译API进行翻译
- OpenStack 对接 Ceph
- 享受科研,心怀远方:青年学者刘元玮的成长之路
- denoiser降噪实例
- BC20 MQTT与GPS功能测试
- 虎门大桥抖动,千亿级的物联网市场被打开
- java基本语法——helloword
- 怎样用excel剔除异常数据_(如何剔除excel表格中重复的数据)excel表格怎么剔除异常数据...
- 债务人不愿腾房是否能拍卖
- Verilog语言快速入门
- 近世代数--唯一分解整环上的多项式环--本原多项式的可约问题
- SWUST OJ 之 0594 Maximum Tape Utilization Ratio
热门文章
- 免费微信公众号专用h5在线电影票API
- JAVA面向对象编程1
- 快速批量重命名文件(夹)
- 【数据可视化】AntV L7实现地图可视化,DrillDownLayer钻取异步获取数据,悬浮预警框
- 数字图像处理(2): 颜色空间/模型—— RGB, CMY/CMYK, HSI, HSV, YUV
- 飞鸽快递系统代码_中通快递港股上市募资约96亿港元,董事长赖梅松认为股票代码2057寓意开启新征程...
- 认知科学、神经科学、和认知神经科学
- 大学生利用信息差赚钱的方式
- 网站搭建的流程是什么
- 用Python3抓取并分析猫眼电影TOP100