关于Python正则表达式 findall函数问题详解


Posted in Python onMarch 22, 2018

在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候。下面看下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 相关文章推荐
初学python数组的处理代码
Jan 04 Python
Windows下搭建python开发环境详细步骤
Jul 20 Python
Android分包MultiDex策略详解
Oct 30 Python
pycharm下打开、执行并调试scrapy爬虫程序的方法
Nov 29 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
pytorch 预训练层的使用方法
Aug 20 Python
python如何从文件读取数据及解析
Sep 19 Python
Python中断多重循环的思路总结
Oct 04 Python
Python实现快速排序的方法详解
Oct 25 Python
pandas实现DataFrame显示最大行列,不省略显示实例
Dec 26 Python
python梯度下降算法的实现
Feb 24 Python
解决导入django_filters不成功问题No module named 'django_filter'
Jul 15 Python
Django自定义过滤器定义与用法示例
Mar 22 #Python
Python实现基于TCP UDP协议的IPv4 IPv6模式客户端和服务端功能示例
Mar 22 #Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 #Python
Python cookbook(数据结构与算法)从字典中提取子集的方法示例
Mar 22 #Python
python实现将excel文件转化成CSV格式
Mar 22 #Python
python 对象和json互相转换方法
Mar 22 #Python
利用python将json数据转换为csv格式的方法
Mar 22 #Python
You might like
PHP下操作Linux消息队列完成进程间通信的方法
2010/07/24 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
PHP实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
yii的CURD操作实例详解
2014/12/04 PHP
Laravel 5.4重新登录实现跳转到登录前页面的原理和方法
2017/07/13 PHP
Mootools 1.2教程 定时器和哈希简介
2009/09/15 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
js获取location.href的参数实例代码
2013/08/02 Javascript
浅析Javascript中“==”与“===”的区别
2014/12/23 Javascript
可以浮动某个物体的jquery控件用法实例
2015/07/24 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
Nodejs 复制文件/文件夹的方法
2017/08/24 NodeJs
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
JS实现获取进今年第几天是周几的方法分析
2018/06/27 Javascript
用Angular实现一个扫雷的游戏示例
2020/05/15 Javascript
快速解决Vue、element-ui的resetFields()方法重置表单无效的问题
2020/08/12 Javascript
[01:32]2016国际邀请赛中国区预选赛IG战队首日赛后采访
2016/06/27 DOTA
使用pdb模块调试Python程序实例
2015/06/02 Python
python实现随机森林random forest的原理及方法
2017/12/21 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
对python中的xlsxwriter库简单分析
2018/05/04 Python
python2和python3的输入和输出区别介绍
2018/11/20 Python
python实现画五角星和螺旋线的示例
2019/01/20 Python
python实现连连看游戏
2020/02/14 Python
pytorch中的weight-initilzation用法
2020/06/24 Python
python 实现性别识别
2020/11/21 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
银行介绍信范文
2014/01/10 职场文书
本科生导师推荐信范文
2014/05/18 职场文书
单位工作证明范文
2014/09/14 职场文书
2015年护士医德医风自我评价
2015/03/03 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
拿破仑传读书笔记
2015/07/01 职场文书
MySql学习笔记之事务隔离级别详解
2021/05/12 MySQL
Pycharm 如何设置HTML文件自动补全代码或标签
2021/05/21 Python