Python正则表达式re.findall一个有趣的现象
下面通过几个案例来分析一下,
注意:本节的parsematch函数请参考《妙用re.sub分析正则表达式解析匹配过程》
案例一:
>>> re.findall(r".* .* (.*)",'第二回 悟彻菩提真妙理 断魔归本合元神')
['断魔归本合元神']
>>> parsematch(r".* .* (.*)",'第二回 悟彻菩提真妙理 断魔归本合元神')
第1次匹配,匹配情况:
匹配子串group(0): 第二回 悟彻菩提真妙理 断魔归本合元神,位置为:(0, 19)
匹配子串group(1): 断魔归本合元神,位置为:(12, 19)
>>> re.findall(r".* .* (.*)",'第二回 悟彻菩提真妙理 断魔归本合元神')
['断魔归本合元神']
案例二:
>>> re.findall("(.)*",'第二回 悟彻菩提真妙理 断魔归本合元神')
['神', '']
>>> parsematch("(.)*",'第二回 悟彻菩提真妙理 断魔归本合元神')
第1次匹配,匹配情况:
匹配子串group(0): 第二回 悟彻菩提真妙理 断魔归本合元神,位置为:(0, 19)
匹配子串group(1): 神,位置为:(18, 19)
第2次匹配,匹配情况:
匹配子串group(0): ,位置为:(19, 19)
案例三:
>>> re.findall(".*",'第二回 悟彻菩提真妙理 断魔归本合元神')
['第二回 悟彻菩提真妙理\u3000断魔归本合元神', '']
>>> parsematch(".*",'第二回 悟彻菩提真妙理 断魔归本合元神')
第1次匹配,匹配情况:
匹配子串group(0): 第二回 悟彻菩提真妙理 断魔归本合元神,位置为:(0, 19)
第2次匹配,匹配情况:
匹配子串group(0): ,位置为:(19, 19)
>>>
案例四:
>>> re.findall(r"(.*) (.*) (.*)",'第二回 悟彻菩提真妙理 断魔归本合元神')
[('第二回', '悟彻菩提真妙理', '断魔归本合元神')]
>>>
上述4个案例的前2个案例,在第一次匹配存在group(1)的情况下,findall中返回的第一个元素为group(1)的匹配子串,而group(0)的数据没有在findall中返回,而3个案例的第2次匹配以及第3个案例的第1次匹配都只有group(0),此时findall返回的就是group(0)的整体搜索串,第4个案例返回的是group(1,2,3)。
从这几个案例的情况来看,findall在匹配后,如果匹配的子串只有一个组,则返回组0,否则返回组0后面的组,而组0不再返回。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
Python正则表达式re.findall一个有趣的现象的更多相关文章
- Python正则表达式re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')的结果为什么是['9']
在<Python妙用re.sub分析正则表达式匹配过程>中老猿分析了findall函数的返回情况,老猿前一阵子在执行这个语句时: >>> re.findall(" ...
- python正则表达式(5)--findall、finditer方法
findall方法 相比其他方法,findall方法有些特殊.它的作用是查找字符串中所有能匹配的字符串,并以结果存于列表中,然后返回该列表 注意: match 和 search 是匹配一次 finda ...
- python 正则表达式 re.findall &re.finditer
语法: findall 搜索string,以列表形式返回全部能匹配的子串 re.findall(pattern, string[, flags]) finditer 搜索string,返回一个顺序访问 ...
- setInterval()与clearInterval()的一个有趣小现象
今天在使用setInterval()时,发现了一个有意思的事情 代码如下: var box=document.getElementById("box");//获取id为“box”的 ...
- java中使用split分割字符串一个有趣的现象
最近在项目中,发现了一个bug,充分了展示了自己对java底层的认知有很多的不足和欠缺. 下面有段代码: String str="1#2#3"; String[] strs=str ...
- Python正则表达式之findall疑点
在findall中使用()进行分组时,得出的结果会优先提取分组的,比如下面这个例子 In [46]: re.findall(r"www.(baidu|163).com", &quo ...
- python正则表达式应用 定义一个函数,求字符串中出现的所有整数之和
- C++语法小记---一个有趣的现象
下面的代码会飞吗? #include <iostream> #include <string> using namespace std; class Test { public ...
- Python正则表达式re模块学习遇到的问题
Python正则表达式处理的组是什么? Python正则表达式处理中的匹配对象是什么? Python匹配对象的groups.groupdict和group之间的关系 Python正则表达式re.mat ...
随机推荐
- Open-Falcon 告警 如何实现自定义多功能告警
Open-Falcon 是小米运维部开源的一款互联网企业级监控系统解决方案.其中有着如下的特点: ①强大灵活的数据采集:自动发现,支持falcon-agent.snmp.支持用户主动push.用户自定 ...
- Golang调度器GMP原理与调度全分析(转 侵 删)
该文章主要详细具体的介绍Goroutine调度器过程及原理,包括如下几个章节. 第一章 Golang调度器的由来 第二章 Goroutine调度器的GMP模型及设计思想 第三章 Goroutine调度 ...
- MySQL索引结构之B+树索引(面)
首先要明白索引(index)是在存储引擎(storage engine)层面实现的,而不是server层面.不是所有的存储引擎都支持所有的索引类型.即使多个存储引擎支持某一索引类型,它们的实现和行为也 ...
- 七:Redis的持久化
1.RDB(Redis DataBase) 1.1 定义:在指定的时间间隔内将内存中的数据集快照写入磁盘,也就是行话讲的snapshot快照,他恢复时是将快照文件直接读到内存里 是什么:Redis会单 ...
- 删除ceph集群mds
ceph集群新搭建以后是只有一个默认的存储池rbd的池 ## 创建文件接口集群 1.创建一个元数据池 [root@mytest ~]# ceph osd pool create metadata 20 ...
- 【芯片手册开发】Sil9136音频开发详细分析+源码实战
目录 前言 参考 手册使用+实战 配置 Configuring Audio Using I2S 总结实现 前言 默认在开发了视频方面后 这方面的工作本来可以找技术支持拿个例程参考下,很快就可以的写出来 ...
- CSS @property - 实验性
- [原题复现][极客大挑战 2019]HardSQL(updatexml报错注入)
简介 原题复现: 考察知识点:SQL注入(报错注入,绕过过滤) 线上平台:https://buuoj.cn(北京联合大学公开的CTF平台 特别感谢!) 榆林学院内可使用信安协会内部的CTF训练平 ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- 企业级工作流解决方案(十二)--集成Abp和ng-alain--用户身份认证与权限验证
多租户 如果系统需要支持多租户,那么最好事先定义好多租户的存储部署方式,Abp提供了几种方式,根据需要选择,每一个用户身份认证与权限验证都需要完全的隔离 这里设计的权限数据全部存储在缓存中,每个租户单 ...