Python正则表达式re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')的结果为什么是['9']
2024-10-15 18:05:03
在《Python妙用re.sub分析正则表达式匹配过程》中老猿分析了findall函数的返回情况,老猿前一阵子在执行这个语句时:
>>> re.findall("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')
['9']
>>>
没有弄明白为什么是这个结果,我们使用《Python妙用re.sub分析正则表达式匹配过程》介绍的方法parsematch来分析一下:
>>> parsematch("[A-Za-z]([A-Za-z0-9])*[.]txt",'Abc2019.txt')
第1次匹配,匹配情况:
匹配子串group(0): Abc2019.txt,位置为:(0, 11)
匹配子串group(1): 9,位置为:(6, 7)
>>>
结合《Python正则表达式re.findall一个有趣的现象》我们知道这个返回确实是符合《Python正则表达式re.findall一个有趣的现象》的分析的。
但为什么group(1)是“9”呢?这是因为重复匹配的描述符“*”
是对组“([A-Za-z0-9])”的限定,由于“*”是贪婪的,因此组匹配到一个字符后会继续往下匹配,直到遇到小数点之前才终止,因此group(1)最终的匹配结果是‘9’。
贪婪模式和非贪婪模式的匹配处理过程请参考《Python正则表达式\W+和\W*匹配过程的深入分析》的相关分析。
老猿Python,跟老猿学Python!
博客地址:https://blog.csdn.net/LaoYuanPython
请大家多多支持,点赞、评论和加关注!谢谢!
最新文章
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(58)-DAL层重构
- CozyRSS1.0 - 有可用性版本
- 三种经典iPhone上网络抓包方法详解
- js方法类库封装的简易示例
- UGUI之布局的使用
- BestCoder13 1001.Beautiful Palindrome Number(hdu 5062) 解题报告
- JAVA 多态的一种实现
- 【转】Android.mk文件语法规范(Android.mk File)
- Python3 字符编码
- 解决Eclipse中编辑xml文件的智能提示问题,最简单的是第二种方法。
- tp其他功能
- jwt vs session 以rails 为例 (翻译部分)
- Mongodb for .Net Core 驱动的应用
- 王之泰201771010131《面向对象程序设计(java)》第四周学习总结
- Python自动化运维开发实战 三、python文件类型
- Java学习笔记:注解Annotation
- 【配置】Spring Struts配置信息
- 【Unity】第9章 粒子系统
- centos中安装、升级git
- 20155216 2016-2017-2 《Java程序设计》第三周学习总结
热门文章
- OJ-2:区间问题【九度1554】
- thinkphp之无限分类
- 鸿蒙开发板外设控制 之 实现物理按键的“长按事件”(按键通用框架 V0.0.2)
- 探索RocketMQ的重复消费和乱序问题
- Docker - 解决 gitlab 容器上的项目进行 clone 时,IP 地址显示一串数字而不是正常 IP 地址的问题
- svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方案
- php随机填充字符串内容
- mybatis 字符串比较 == 用法
- List/Set 泛型转换
- VMware虚拟机 - 解决主机每次重启后 VMWare 都无法上网的问题