关于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基础之函数用法实例详解
Sep 10 Python
Python双精度浮点数运算并分行显示操作示例
Jul 21 Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 Python
python Tkinter的图片刷新实例
Jun 14 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
Aug 01 Python
Pytorch之parameters的使用
Dec 31 Python
tensorboard显示空白的解决
Feb 15 Python
golang/python实现归并排序实例代码
Aug 30 Python
python 元组和列表的区别
Dec 30 Python
Python实现京东抢秒杀功能
Jan 25 Python
python爬取豆瓣电影排行榜(requests)的示例代码
Feb 18 Python
Python爬虫爬取ts碎片视频+验证码登录功能
Feb 22 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
Yii中表单用法实例详解
2016/01/05 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
文本框输入时 实现自动提示(像百度、google一样)
2012/04/05 Javascript
JavaScript数组常用操作技巧汇总
2014/11/17 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
深入理解JavaScript系列(31):设计模式之代理模式详解
2015/03/03 Javascript
DEDECMS如何为文章添加HOT NEW标志图片
2015/08/14 Javascript
JavaScript计划任务后台运行的方法
2015/12/18 Javascript
使用Javascript实现选择下拉菜单互移并排序
2016/02/23 Javascript
深入理解javascript作用域第二篇之词法作用域和动态作用域
2016/07/24 Javascript
JS中使用mailto实现将用户在网页中输入的内容传递到本地邮件客户端
2016/10/08 Javascript
JS实现520 表白简单代码
2018/05/21 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
koa2 用户注册、登录校验与加盐加密的实现方法
2019/07/22 Javascript
解决layer弹出层的内容页点击按钮跳转到新的页面问题
2019/09/14 Javascript
js 动态校验开始结束时间的实现代码
2020/05/25 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python实现的防DDoS脚本
2011/02/08 Python
快速了解Python开发中的cookie及简单代码示例
2018/01/17 Python
Python3爬虫学习之爬虫利器Beautiful Soup用法分析
2018/12/12 Python
python网络应用开发知识点浅析
2019/05/28 Python
logging level级别介绍
2020/02/21 Python
pycharm安装及如何导入numpy
2020/04/03 Python
瑞典多品牌连锁店:Johnells
2021/01/13 全球购物
标记环网Toke Ring IEEE802.5
2014/05/26 面试题
自荐书范文范例
2014/02/13 职场文书
2014年档案室工作总结
2014/12/01 职场文书
员工表扬信怎么写
2015/05/05 职场文书
干部外出学习心得体会
2016/01/18 职场文书
技术入股协议书
2016/03/22 职场文书
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
Python实现数据的序列化操作详解
2022/07/07 Python