Python正则表达式中使用findall函数遇到括号嵌套的小坑
1.findall函数
我们都知道括号在正则表达式中起到了分类的作用,但当定义好一个自己的字符匹配模式(含有括号)后,使用findall()函数会遇到一点小坑。
具体来说就是:
可以发现是否将整个正则表达式用括号括起来会影响findall的返回结果。
- 如果有括号括,则返回元组的第0项是匹配到的整个字符串’abcde’
- 如果没有,则返回元组的第0项就是第一对括号’bc’
并且当存在多层括号嵌套时,各组的排序遵循从左到右,从外到内的原则。即对于正则表达式(a(bc)((d)(e))),'abcde’是第0组,'bc’是第1组,'de’是第2组,'d’是第3组,而’e’则是第4组。
2.findall与search
读到这边你可能会有疑惑,这不是很合理的设定吗,哪里“坑了”?这就不得不提高正则表达式中经常会用到的search函数,如果你定义了上文中那个没有用括号整个括起来的正则表达式:
tt = re.compile(r'a(bc)((d)(e))')
再调用search函数,就会发现问题所在:
我们发现即使没有括号括起整个正则表达式,search(‘abcde’).group(0)返回的仍然是整个字符串,group(1)才是定义好的“第一组”,这与findall函数所得到的结果是不同的,在实际使用中必须要区分search函数与findall函数的区别!!!
注:groups()函数总是返回整个字符串,注意区分group()与groups()
如果定义的下面这种呢:
tt = re.compile(r'(a(bc)((d)(e)))')
你会发现自己多此一举了,group(0)与group(1)都会返回整个字符串:
3.总结
总结一下,即:
- 有几对括号,findall函数就分几组,排列顺序遵循从左到右,由外到内,想要把整个字符串作为元组的一项,就给整个正则表达式套括号
- search返回对象的group(0)总是整个字符串,然后才是相应的组,所以不必多次一举给整个正则表达式套括号。
Python正则表达式中使用findall函数遇到括号嵌套的小坑相关推荐
- python findall函数_python正则表达式之中的findall函数是什么?
在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...
- python中的findall函数_关于Python正则表达式 findall函数问题详解
在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候.下面看下re模块下的findall()函数和多个表达式元组相遇的时候会出现什么样的坑. 代码如下: import re str ...
- python正则表达式中group
(一)正则表达式中的(-) 用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\number来进行进一步的匹配,如下所述.当 ...
- Python正则表达式中的‘r‘
Python正则表达式中的'r' 最近遇到一个非常困惑的地方,那就是在使用Python中的正则表达式的时候,正则表达式前面的'r'带来的影响.自己最开始的困惑点在于,'r'的作用是声明为原始字符串,那 ...
- python正态分布中的normal函数
python正态分布中的normal函数 概念 1.正态分布又名高斯分布,是人们最常用的描述连续型随机变量的概率分布. 在金融学研究中,收益率等变量的分布假定为正态分布或者对数正态分布(取对数后服从正 ...
- 详解Python正则表达式中group与groups的用法
在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息. group方法是re.MatchObject类中的一个函数,用于返回匹配对象的整个匹配结果或特 ...
- python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...
原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...
- Python正则表达式中的贪心模式和非贪心模式
声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权.在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售.如果再发现有人卖 ...
- Python正则表达式中的转义问题\\\\\\\\\????(焯!什么鬼)
这次写这篇博客是一个容易把自己绕糊涂的问题 就是转义问题啦(开练开练) 转义字符和原生字符串: 首先讲一下一些基础的概念 转义字符和原生字符串的区别 '\n'代表换行,是一个转义字符 r'\n' 代表 ...
最新文章
- Java面试人事篇(二)
- OpenCV人脸识别LBPH算法源码分析
- yii2地址多级联动
- 定位position(前面布局无法实现
- DNS劫持DNSmasq详细解析及详细配置
- python判断对错题_可以在线答题,并且能判断对错,将错题保存起来
- python怎么画线_python画直线图
- 第5章、解析Hello,world!知其然,更要知其所以然(从零开始学Android)
- 学校选课系统服务器繁忙,大学选课没选到怎么办
- fullscreen mode and windowed mode
- 准备嵌入式Linux开发环境
- 《Flutter入门疑难杂症》imagepicker ImagePicker().getVideo()返回.jpg
- KEIL仿真和vspd
- php pdo oracle 乱码,php pdo 乱码怎么办
- java使用md5以及jar包下载
- 礼品 read.php,心愿送礼网教你如何体面的接受礼品
- 地平线杨铭:从无形视觉到有形芯片
- 【027】Sudoku–随时在线做数独
- github django html5,django-html5-forms
- 8.数字魔方问题:在3×3的棋盘上摆放1~9数字,使每行、每列及对角线数字之和均相等。
热门文章
- java读取网络图片数据_如何利用java读取网络照片
- matlab如何形成节点导纳矩阵,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程...
- 好好爱自己,胜过千言万语
- Linux挖矿病毒事件应急响应演练(dbused木马)
- java函数式编程-科里化
- PHP微信公众平台自定义菜单
- 【恭喜考研拟录取】极力推荐科研必备软件,让你科研生涯事半功倍(3万字超全总结-码住系列)
- android app 原生 小米手机 TextView 不显示文字
- 网站服务器评测,9.2分! 浪潮服务器受到海外权威专业评测网站肯定
- Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理