pythonimportre_python中re模块简析
python中re模块简析
发布时间:2020-05-20 20:01:47
来源:51CTO
阅读:383
re的分组功能
python的re模块有一个分组功能。所谓的分组就是去已经匹配到的内容里面再筛选出需要的内容,相当于二次过滤。
实现分组靠圆括号(),而获得分组的内容靠的是group(),groups(),groupdict()方法。
re模块里的几个重要方法在分组上,有不同的表现形式,需要区别对待。
re实例
match()方法
不分组时的情况:
import re
origin = "hasdfi123123safd"
# 不分组时的情况
r = re.match("h\w+", origin)
print(r.group()) # 获取匹配到的整体结果
print(r.groups()) # 获取模型中匹配到的分组结果元组
print(r.groupdict()) # 获取模型中匹配到的分组中所有key的字典
结果:
hasdfi123123safd
()
{}
有分组的情况(注意圆括号!)
import re
origin = "hasdfi123123safd123"
# 有分组
r = re.match("h(\w+).*(?P\d)$", origin)
print(r.group()) # 获取匹配到的整体结果
print(r.group(1)) # 获取匹配到的分组1的结果
print(r.group(2)) # 获取匹配到的分组2的结果
print(r.groups()) # 获取模型中匹配到的分组结果元组
print(r.groupdict()) # 获取模型中匹配到的分组中所有key的字典
执行结果:
hasdfi123123safd123
asdfi123123safd12
3
('asdfi123123safd12', '3')
{'name': '3'}
说明⚠️:
(1)正则表达式h(\w+).*(?P<name>\d)$中有2个小括号,表示它分了2个小组,在匹配的时候是拿整体的表达式去匹配的,而不是拿小组去匹配的。
(2)(\w+)表示这个小组内是1到多个字母数字字符,相当于匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]'。
(3)(?P<name>\d)中?P<name>是个正则表达式的特殊语法,表示给这个小组取了个叫“name”的名字,?P<xxxx>是固定写法。\d匹配一个数字字符。等价于[0-9]。
(4)在获取分组值的时候,group()和group(0)是对等的,都表示整个匹配到的字符串,从group(1)开始,分别是从左往右的小组序号,按位置顺序来。
search()方法
有分组的情况:
import re
origin = "sdfi1ha23123safd123" # 注意这里对匹配对象做了下调整
# 有分组
r = re.search("h(\w+).*(?P\d)$", origin)
print(r.group())
print(r.group(0))
print(r.group(1))
print(r.group(2))
print(r.groups())
print(r.groupdict())
执行结果:
ha23123safd123
ha23123safd123
a23123safd12
3
('a23123safd12', '3')
{'name': '3'}
说明⚠️:表现得和match()方法基本一样。
match()方法与search()方法区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。
举例如下:
#!/usr/bin/python
import re
line = "Cats are smarter than dogs";
matchObj = re.match( r'dogs', line, re.M|re.I)
if matchObj:
print "match --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
matchObj = re.search( r'dogs', line, re.M|re.I)
if matchObj:
print "search --> matchObj.group() : ", matchObj.group()
else:
print "No match!!"
以上代码执行结果如下:
No match!!
search --> matchObj.group() : dogs
扩展
正则表达式实例:
#!/usr/bin/python
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print "matchObj.group() : ", matchObj.group()
print "matchObj.group(1) : ", matchObj.group(1)
print "matchObj.group(2) : ", matchObj.group(2)
else:
print "No match!!"
说明⚠️:关于正则表达式r'(.*) are (.*?) .*'
(1)首先,这是一个字符串,前面的一个 r 表示字符串为非转义的原始字符串,让编译器忽略反斜杠,也就是忽略转义字符。但是这个字符串里没有反斜杠,所以这个 r 可有可无。
(2)(.) 第一个匹配分组,. 代表匹配除换行符之外的所有字符。
(3)(.?) 第二个匹配分组,.? 后面多个问号,代表非贪婪模式,也就是说只匹配符合条件的最少字符。
(4)后面的一个 .* 没有括号包围,所以不是分组,匹配效果和第一个一样,但是不计入匹配结果中。
(5)matchObj.group() 等同于 matchObj.group(0),表示匹配到的完整文本字符
matchObj.group(1) 得到第一组匹配结果,也就是(.*)匹配到的
matchObj.group(2) 得到第二组匹配结果,也就是(.*?)匹配到的
因为只有匹配结果中只有两组,所以如果填 3 时会报错。
参考文档
刘江python教程
python正则表达式01-re
python正则表达式02-re
pythonimportre_python中re模块简析相关推荐
- 今晚直播 | 强化学习在比赛和自动机器学习中的应用简析
「AI Drive」是由 PaperWeekly 和 biendata 共同发起的学术直播间,旨在帮助更多的青年学者宣传其最新科研成果.我们一直认为,单向地输出知识并不是一个最好的方式,而有效地反馈和 ...
- 离散数学中Warshall算法简析
离散数学中Warshall算法简析 最近学了离散数学的图论,突然感觉离散数学的作用十分强大,相信学好离散数学中的算法,编程的魅力也不言而喻.闲话不多说,这篇博客中记录的是Warshall算法的简单解析 ...
- PHP+新浪微博开放平台+新浪云平台(SAE)开发微博应用——PHP SDK中Demo程序简析
PHP+新浪微博开放平台+新浪云平台(SAE) --新浪微博应用开发的一个解决方案 一.PHP+新浪微博开放平台+新浪云平台(SAE)方案的基础 二.建立微博应用的过程 三.PHP SDK中Demo程 ...
- STL中sort算法简析
STL里sort算法简析 文章目录 STL里sort算法简析 一.引入 二.正解 三.源码 **`sort的源码`**: **`其中,__introsort_loop便是内省式排序:`** 插入排序 ...
- SystemUI中的PowerUI简析
PowerUI powerUI是SystemUI显示电池相关信息的模块,包括低电量提醒,危急电量关机提醒,高温关机提醒,省电模式等的功能. 在powerUI.java 中主要是两个函数start()和 ...
- RocketMQ 在联想大数据中的应用简析
http://casaveneziausa.com/lenovo-logo/ 众所周知,RocketMQ 作为一款分布式.队列模型的消息中间件,具有以下特点: 严格保证的消息顺序 丰富的消息拉取模式 ...
- python cdr_Python 常用模块简析
reandom:随机数获取 random.random():获取[0.0,1.0)之间内的随机浮点数. print(random.random())# 不包含1,取不到1.0 random.randi ...
- ahp层次分析法软件_层次分析法在历史街区研究中的应用简析
摘要 AHP (Analytic Hierarchy Process)层次分析法通常被运用于解决多目标.多标准.多要素.多层次的非结构化的复杂决策性问题,特别是战略决策性问题,在建筑.规划.风景园林等 ...
- Windows Server 2008域中组的简析
在域中创建合乎具体生产环境的组对象,先要搞清楚各类组作用域和类型,见下图: 组作用域(Group Scope): 本地域(Domain Local):可用于包含具有相似资源访问需求的用户和组,例如所有 ...
最新文章
- 【Python】创建和使用类
- Swift函数_默认参数
- 随机生成器、thread(暂停)、清屏定义
- 星来客机器人餐厅_在50米高空聚餐,在铁窗内吃饭,盘点全球特色餐厅,看看有多奇葩...
- 互联网日报 | 京东开启最大规模校招;特斯拉西部首个交付中心在蓉投入使用;嫦娥五号上升器点火起飞...
- find查找文件和目录
- 规则绝对公平时,社会财富的流向谁?
- 海王星 :谈中国共享软件的发展
- Android WebApp NativeApp 适配测试自动化平台GoGo实现 东海陈光剑
- 【渝粤题库】国家开放大学2021春2130药物治疗学题目
- 模糊二维码识别、残缺二维码识别、快速二维码识别
- 微信公众号模板如何使用?公众号模板教程!
- SQL 7种SQL JOINS的实现
- 普元 AppServer 6.5 将springboot应用部署到应用服务器,上传文件时报错:Caused by: org.springframework.web.multipart.Multipar
- 极度的坦诚就是无坚不摧
- Python金融大数据分析:用pandas处理金融时间序列数据的基础知识
- ESA SNAP工具包Java接口的使用
- python中scrapy可以爬取多少数据_python scrapy框架爬取某站博人传评论数据
- ActiveX 控件
- iTunes for Windows 64bit 下载
热门文章
- 前端实习生400字周记
- java disconnect_Java HttpResponse.disconnect方法代码示例
- 【腾讯云的1001种玩法】个人网站如何开启HTTPS?
- excel导入mysql 截断_解决Excel导入数据库时出现的文本截断问题
- 图像预训练模型的起源解说和使用示例
- 2009年三季度基金持股减仓表1
- 云管平台 — vRealize Suite
- 修改计算机 注册到 用户,电脑修改注册表导致开机时电脑显示“无法登陆到你的账户”的问题解决方案...
- 不是所有码农都有货之Java 实例 - 数组并集
- 诺康得NKD完成500万天使轮融资,专注于糖化学细胞治疗