python中的findall函数_关于Python正则表达式 findall函数问题详解
在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候。下面看下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函数问题详解相关推荐
- python中define的用法_#define用法,C语言#define详解
C语言中,可以用 #define 定义一个标识符来表示一个常量.其特点是:定义的标识符不占内存,只是一个临时的符号,预编译后这个符号就不存在了. 预编译又叫预处理.预编译不是编译,而是编译前的处理.这 ...
- 站长在线Python精讲:在Python中使用split()方法分割、使用join()方法合并字符串详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用split()方法分割.使用join()方法合并字符串详解>.本知识点主要内容有:在Python中使用s ...
- python中的递归思想_〖Python〗-- 递归、面向对象初识及编程思想
[递归.面向对象初识及编程思想] 一.递归 1.定义: 在函数内部,可以调用其他函数.如果一个函数在内部调用自身本身,这个函数就是递归函数. (1)递归就是在过程或函数里调用自身: (2)在使用递归策 ...
- linux中grep命令 菜鸟教程,linux grep正则表达式与grep用法详解
需要大家牢记:正则表达式与通配符不一样,它们表示的含义并不相同 正则表达式只是字符串的一种描述,只有和支持正则表达式的工具相结合才能进行字符串处理.本文以grep为例来讲解正则表达式. grep命令 ...
- python中len的用法_总结Python中len()函数的使用实例
这篇文章主要简单介绍了Python中的len()函数的使用,包括在四种情况下的使用小例子,是Python学习当中的基础知识,需要的朋友可以参考下 函数:len() 1:作用:返回字符串.列表.字典.元 ...
- python中object的用法_【Python】【基础知识】【内置函数】【object的使用方法】
原英文帮助文档: classobject Return a new featureless object. object is a base for all classes. It has the m ...
- python中case的用法_用 Python 实现简单的 switch/case 语句
在Python中是没有Switch / Case语句的,很多人认为这种语句不够优雅灵活,在Python中用字典来处理多条件匹配问题字典会更简单高效,对于有一定经验的Python玩家不得不承认,的确如此 ...
- python中对列表排序_在Python中对嵌套列表进行排序和分组
在Python中对嵌套列表进行排序和分组 我具有以下数据结构(列表列表) [ ['4', '21', '1', '14', '2008-10-24 15:42:58'], ['3', '22', '4 ...
- 简述python中面向对象的概念_简述Python中的面向对象编程的概念
面向对象编程--Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数. 面向过程的程序设计把计算机 ...
- python中main的作用_浅析python 中__name__ = '__main__' 的作用
很多新手刚开始学习python的时候经常会看到python 中__name__ = \'__main__\' 这样的代码,可能很多新手一开始学习的时候都比较疑惑,python 中__name__ = ...
最新文章
- Linux 小知识翻译 - 「NTP」
- GMIS 2017大会邓力演讲:无监督学习的前沿与SPDG方法的优良性
- 【Java】聊天机器人
- Bootstrap 如何使用字体图标
- Redis缓存异常的容错实现方法( .net)
- PropertyGrid伴侣PropertyTable
- php中用户自定义排序
- web安全的一些专业术语介绍
- arduino 智能车组装步骤_Arduino 智能避障智能小车制作图文教程
- android手机账号什么意思,苹果手机怎么改id账号 id账号是什么
- ARM开发板开机自启
- 普歌-码上鸿鹄团队:在Nuxt(vue)渲染模板中使用mock.js随机生成数据
- Java必备常见单词
- XV6实验环境的搭建
- 【路由器连接天翼网关2.0问题解决思路】
- 计算一个字符串里面特定字符的个数
- oracle 磁盘组掉了,Oracle 11g RAC ASM磁盘全部丢失后的恢复(一)
- Jetson Nano复制系统和U盘启动【第三部分】
- hive:创建udf函数过滤emoji表情等特殊字符
- CRC32校验算法(查表法)
热门文章
- 计算机网络自考考题,自考计算机网络技术历年考题汇总
- 给猫穿汉服,95 后自己的浪漫你不懂
- 微信小程序自定义navigationBar、自定义标题栏
- vue 页面设置meta标签
- 销售数据分析——tableau仪表盘示例
- 学计算机安徽有什么好大学,合肥工业大学,安徽大学,哪个学校计算机研究生比较好...
- 平衡树+LCT全纪录
- Detailed analysis for runtime exception vector table and handler in TFA
- (再转一个)双边市场理论研究综述(作者:朱振中 吕廷杰)
- 权重叠加是这样计算的