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

代码如下:

import re

str="a b c d"

regex0=re.compile("((\w+)\s+\w+)")

print(regex0.findall(str))

regex1=re.compile("(\w+)\s+\w+")

print(regex1.findall(str))

regex2=re.compile("\w+\s+\w+")

print(regex2.findall(str))

结果:

[('a b', 'a'), ('c d', 'c')]

['a', 'c']

['a b', 'c d']

可能结果有点意外,下面解释一下

第一个正则表达式中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple

第二个正则表达式中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。

第三个正则表达式中不带有括号,其输出的内容就是整个表达式所匹配到的内容。

结论:findall()返回的是括号所匹配到的结果(如regex1),多个括号就会返回多个括号分别匹配到的结果(如regex),如果没有括号就返回就返回整条语句所匹配到的结果(如regex2)。所以在提取数据的时候就需要注意这个坑。

实际上是由其并不是python特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容

python中的findall函数_关于Python正则表达式 findall函数问题详解相关推荐

  1. python中define的用法_#define用法,C语言#define详解

    C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译不是编译,而是编译前的处理.这 ...

  2. 站长在线Python精讲:在Python中使用split()方法分割、使用join()方法合并字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用split()方法分割.使用join()方法合并字符串详解>.本知识点主要内容有:在Python中使用s ...

  3. python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想

    [递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...

  4. linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解

    需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...

  5. python中len的用法_总结Python中len()函数的使用实例

    这篇文章主要简单介绍了Python中的len()函数的使用,包括在四种情况下的使用小例子,是Python学习当中的基础知识,需要的朋友可以参考下 函数:len() 1:作用:返回字符串.列表.字典.元 ...

  6. python中object的用法_【Python】【基础知识】【内置函数】【object的使用方法】

    原英文帮助文档: classobject Return a new featureless object. object is a base for all classes. It has the m ...

  7. python中case的用法_用 Python 实现简单的 switch/case 语句

    在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...

  8. python中对列表排序_在Python中对嵌套列表进行排序和分组

    在Python中对嵌套列表进行排序和分组 我具有以下数据结构(列表列表) [ ['4', '21', '1', '14', '2008-10-24 15:42:58'], ['3', '22', '4 ...

  9. 简述python中面向对象的概念_简述Python中的面向对象编程的概念

    面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...

  10. python中main的作用_浅析python 中__name__ = '__main__' 的作用

    很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...

最新文章

  1. Linux 小知识翻译 - 「NTP」
  2. GMIS 2017大会邓力演讲:无监督学习的前沿与SPDG方法的优良性
  3. 【Java】聊天机器人
  4. Bootstrap 如何使用字体图标
  5. Redis缓存异常的容错实现方法( .net)
  6. PropertyGrid伴侣PropertyTable
  7. php中用户自定义排序
  8. web安全的一些专业术语介绍
  9. arduino 智能车组装步骤_Arduino 智能避障智能小车制作图文教程
  10. android手机账号什么意思,苹果手机怎么改id账号 id账号是什么
  11. ARM开发板开机自启
  12. 普歌-码上鸿鹄团队:在Nuxt(vue)渲染模板中使用mock.js随机生成数据
  13. Java必备常见单词
  14. XV6实验环境的搭建
  15. 【路由器连接天翼网关2.0问题解决思路】
  16. 计算一个字符串里面特定字符的个数
  17. oracle 磁盘组掉了,Oracle 11g RAC ASM磁盘全部丢失后的恢复(一)
  18. Jetson Nano复制系统和U盘启动【第三部分】
  19. hive:创建udf函数过滤emoji表情等特殊字符
  20. CRC32校验算法(查表法)

热门文章

  1. 计算机网络自考考题,自考计算机网络技术历年考题汇总
  2. 给猫穿汉服,95 后自己的浪漫你不懂
  3. 微信小程序自定义navigationBar、自定义标题栏
  4. vue 页面设置meta标签
  5. 销售数据分析——tableau仪表盘示例
  6. 学计算机安徽有什么好大学,合肥工业大学,安徽大学,哪个学校计算机研究生比较好...
  7. 平衡树+LCT全纪录
  8. Detailed analysis for runtime exception vector table and handler in TFA
  9. (再转一个)双边市场理论研究综述(作者:朱振中 吕廷杰)
  10. 权重叠加是这样计算的