关于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实现将元祖转换成数组的方法
May 04 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
python-itchat 获取微信群用户信息的实例
Feb 21 Python
将Python字符串生成PDF的实例代码详解
May 17 Python
对Python中class和instance以及self的用法详解
Jun 26 Python
python 杀死自身进程的实现方法
Jul 01 Python
python打印9宫格、25宫格等奇数格 满足横竖斜相加和相等
Jul 19 Python
Python利用scapy实现ARP欺骗的方法
Jul 23 Python
tensorflow 变长序列存储实例
Jan 20 Python
使用python的pyplot绘制函数实例
Feb 13 Python
如何清空python的变量
Jul 05 Python
pytorch 权重weight 与 梯度grad 可视化操作
Jun 05 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
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
PHP学习笔记之数组篇
2011/06/28 PHP
yii上传文件或图片实例
2014/04/01 PHP
php基于str_pad实现卡号不足位数自动补0的方法
2014/11/12 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
2017/04/18 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
原生js和jquery中有关透明度设置的相关问题
2014/01/08 Javascript
javascript中interval与setTimeOut的区别示例介绍
2014/03/14 Javascript
Node.js事件循环(Event Loop)和线程池详解
2015/01/28 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
浅谈 Vue v-model指令的实现原理
2017/06/08 Javascript
VueJs监听window.resize方法示例
2018/01/17 Javascript
微信小程序自定义tabBar组件开发详解
2020/09/24 Javascript
详解vue-property-decorator使用手册
2019/07/29 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
jquery实现加载更多"转圈圈"效果(示例代码)
2020/11/09 jQuery
详解 Python 读写XML文件的实例
2017/08/02 Python
python实现ID3决策树算法
2017/12/20 Python
DES加密解密算法之python实现版(图文并茂)
2018/12/06 Python
python 用opencv调用训练好的模型进行识别的方法
2018/12/07 Python
详解python中sort排序使用
2019/03/23 Python
Python实现Word文档转换Markdown的示例
2020/12/22 Python
手工制作的意大利太阳镜和光学元件:Illesteva
2019/01/19 全球购物
英国在线药房和在线药剂师:Chemist 4 U
2020/01/05 全球购物
计算机专业自荐信
2013/10/14 职场文书
家长评语大全
2014/01/22 职场文书
学习自我鉴定
2014/02/01 职场文书
《最大的麦穗》教学反思
2014/04/17 职场文书
课前三分钟演讲稿
2014/04/24 职场文书
新郎婚礼答谢词
2015/01/04 职场文书
小学少先队活动总结
2015/05/08 职场文书
如何使用JavaScript策略模式校验表单
2021/04/29 Javascript
vue2实现provide inject传递响应式
2021/05/21 Vue.js
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android