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 ...
随机推荐
- C#练习题 if
提示用户输入用户名,然后再提示输入密码,如果用户名是"admin"并且密码是"888888",则提示正确,否则,如果用户名不是admin还提示用户用户名不存在, ...
- 1、Web应用
一 Web应用的组成 接下来我们学习的目的是为了开发一个Web应用程序,而Web应用程序是基于B/S架构的,其中B指的是浏览器,负责向S端发送请求信息,而S端会根据接收到的请求信息返回相应的数据给浏览 ...
- 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常
自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...
- wireguard使用
1.编译与安装 sudo apt-get install libmnl-dev libelf-dev linux-headers-$(uname -r) build-essential pkg-con ...
- ceph写osd的配置文件/etc/ceph/ceph.conf
ceph在部署过程中是先进行部署,再去写配置文件的,而一些新手在部署完了后,并没有写配置文件,在重启服务器后,因为挂载点没有挂载,所以服务无法启动,所以需要写好配置文件 还有一种情况是集群有几百个os ...
- Bad magic number ImportError in python
是源码编译里面版本不对,删除掉源码pyc然后重新编译就可以了 find .-name '*.pyc'-delete python -m compileall . 更新历史 why when 创建 20 ...
- win10安装MySQL5.7.31 zip版
因为我之前卸载了安装的(msi,exe)格式的MySQL,现在重新安装zip版的MySQL. 1,下载MySQL MySQL下载地址 : https://dev.mysql.com/downloads ...
- Spring Cloud Gateway原理
1.使用 compile 'org.springframework.cloud:spring-cloud-starter-gateway' 2.包结构 actuate中定义了一个叫GatewayCon ...
- springboot中aop的使用
Spring AOP(Aspect Oriented Programming),即面向切面编程,是OOP(Object Oriented Programming,面向对象编程)的补充和完善. OOP引 ...
- 13.java设计模式之模板模式
基本需求: 制作豆浆的流程 选材--->添加配料--->浸泡--->放到豆浆机打碎 通过添加不同的配料,可以制作出不同口味的豆浆 选材.浸泡和放到豆浆机打碎这几个步骤对于制作每种口味 ...