关于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 相关文章推荐
探索Python3.4中新引入的asyncio模块
Apr 08 Python
Python合并字符串的3种方法
May 21 Python
python函数局部变量用法实例分析
Aug 04 Python
NumPy 如何生成多维数组的方法
Feb 05 Python
使用Template格式化Python字符串的方法
Jan 22 Python
Python实现时间序列可视化的方法
Aug 06 Python
python定位xpath 节点位置的方法
Aug 27 Python
python实现提取COCO,VOC数据集中特定的类
Mar 10 Python
解决Django部署设置Debug=False时xadmin后台管理系统样式丢失
Apr 07 Python
python爬虫使用requests发送post请求示例详解
Aug 05 Python
Python开发工具Pycharm的安装以及使用步骤总结
Jun 24 Python
关于python3 opencv 图像二值化的问题(cv2.adaptiveThreshold函数)
Apr 04 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和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
2011/07/03 PHP
php/js获取客户端mac地址的实现代码
2013/07/08 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
js 浮动层菜单收藏
2009/01/16 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
JavaScript 利用Cookie记录用户登录信息
2009/12/08 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
node.js中的fs.lchmod方法使用说明
2014/12/16 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
详解JS面向对象编程
2016/01/24 Javascript
JavaScript+html5 canvas绘制渐变区域完整实例
2016/01/26 Javascript
jquery中取消和绑定hover事件的实现代码
2016/06/02 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
Angular中的ng-template及angular 使用ngTemplateOutlet 指令的方法
2018/08/08 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
NodeJS实现一个聊天室功能
2019/11/25 NodeJs
vue 修改 data 数据问题并实时显示操作
2020/09/07 Javascript
Python检测QQ在线状态的方法
2015/05/09 Python
Flask数据库迁移简单介绍
2017/10/24 Python
详解python使用pip安装第三方库(工具包)速度慢、超时、失败的解决方案
2018/12/02 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
2018/12/12 Python
pyshp创建shp点文件的方法
2018/12/31 Python
python 实现敏感词过滤的方法
2019/01/21 Python
Pycharm 2020最新永久激活码(附最新激活码和插件)
2020/09/17 Python
python扫描线填充算法详解
2020/02/19 Python
python字典key不能是可以是啥类型
2020/08/04 Python
Python 图片处理库exifread详解
2021/02/25 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
大学活动邀请函
2014/01/28 职场文书
庆元旦迎新年广播稿
2014/02/18 职场文书
计划生育证明格式范本
2014/09/12 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
涪陵白鹤梁导游词
2015/02/09 职场文书
详细聊聊MySQL中慢SQL优化的方向
2021/08/30 MySQL
详解nginx location指令
2022/01/18 Servers