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函数遇到括号嵌套的小坑相关推荐

  1. python findall函数_python正则表达式之中的findall函数是什么?

    在这篇文章之中我们来了解一下关于python正则表达式的相关知识,有些朋友可能是刚刚接触到python这一编程语言,对这一方面不是特别的了解,在接下来这篇文章将会来带大家来了解关于正则表达式中的pyt ...

  2. python中的findall函数_关于Python正则表达式 findall函数问题详解

    在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候.下面看下re模块下的findall()函数和多个表达式元组相遇的时候会出现什么样的坑. 代码如下: import re str ...

  3. python正则表达式中group

    (一)正则表达式中的(-)   用于匹配括号内的任何正则表达式,并且指明组的开始和结束位置;可以在执行匹配之后检索组中的内容,并且可以在可以在字符串中使用\number来进行进一步的匹配,如下所述.当 ...

  4. Python正则表达式中的‘r‘

    Python正则表达式中的'r' 最近遇到一个非常困惑的地方,那就是在使用Python中的正则表达式的时候,正则表达式前面的'r'带来的影响.自己最开始的困惑点在于,'r'的作用是声明为原始字符串,那 ...

  5. python正态分布中的normal函数

    python正态分布中的normal函数 概念 1.正态分布又名高斯分布,是人们最常用的描述连续型随机变量的概率分布. 在金融学研究中,收益率等变量的分布假定为正态分布或者对数正态分布(取对数后服从正 ...

  6. 详解Python正则表达式中group与groups的用法

    在Python中,正则表达式的group和groups方法是非常有用的函数,用于处理匹配结果的分组信息. group方法是re.MatchObject类中的一个函数,用于返回匹配对象的整个匹配结果或特 ...

  7. python正则表达式中的r与转义字符_左手用R右手Python系列13——字符串处理与正则表达式...

    原标题:左手用R右手Python系列13--字符串处理与正则表达式 杜雨,EasyCharts团队成员,R语言中文社区专栏作者,兴趣方向为:Excel商务图表,R语言数据可视化,地理信息数据可视化.个 ...

  8. Python正则表达式中的贪心模式和非贪心模式

    声明:最近发现有人利用我在百度云盘里免费分享的127课Python视频盈利,并声称获得我的授权.在此,我声明,文末百度云盘里的Python视频是免费的,不会授权给任何人或机构进行销售.如果再发现有人卖 ...

  9. Python正则表达式中的转义问题\\\\\\\\\????(焯!什么鬼)

    这次写这篇博客是一个容易把自己绕糊涂的问题 就是转义问题啦(开练开练) 转义字符和原生字符串: 首先讲一下一些基础的概念 转义字符和原生字符串的区别 '\n'代表换行,是一个转义字符 r'\n' 代表 ...

最新文章

  1. Java面试人事篇(二)
  2. OpenCV人脸识别LBPH算法源码分析
  3. yii2地址多级联动
  4. 定位position(前面布局无法实现
  5. DNS劫持DNSmasq详细解析及详细配置
  6. python判断对错题_可以在线答题,并且能判断对错,将错题保存起来
  7. python怎么画线_python画直线图
  8. 第5章、解析Hello,world!知其然,更要知其所以然(从零开始学Android)
  9. 学校选课系统服务器繁忙,大学选课没选到怎么办
  10. fullscreen mode and windowed mode
  11. 准备嵌入式Linux开发环境
  12. 《Flutter入门疑难杂症》imagepicker ImagePicker().getVideo()返回.jpg
  13. KEIL仿真和vspd
  14. php pdo oracle 乱码,php pdo 乱码怎么办
  15. java使用md5以及jar包下载
  16. 礼品 read.php,心愿送礼网教你如何体面的接受礼品
  17. 地平线杨铭:从无形视觉到有形芯片
  18. 【027】Sudoku–随时在线做数独
  19. github django html5,django-html5-forms
  20. 8.数字魔方问题:在3×3的棋盘上摆放1~9数字,使每行、每列及对角线数字之和均相等。

热门文章

  1. java读取网络图片数据_如何利用java读取网络照片
  2. matlab如何形成节点导纳矩阵,关于利用矩阵稀疏技术求解节点导纳矩阵的MATLAB编程...
  3. 好好爱自己,胜过千言万语
  4. Linux挖矿病毒事件应急响应演练(dbused木马)
  5. java函数式编程-科里化
  6. PHP微信公众平台自定义菜单
  7. 【恭喜考研拟录取】极力推荐科研必备软件,让你科研生涯事半功倍(3万字超全总结-码住系列)
  8. android app 原生 小米手机 TextView 不显示文字
  9. 网站服务器评测,9.2分! 浪潮服务器受到海外权威专业评测网站肯定
  10. Lucene底层原理和优化经验分享(1)-Lucene简介和索引原理