关于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代码过长的换行方法
Jul 19 Python
Python实现去除列表中重复元素的方法总结【7种方法】
Feb 16 Python
python 堆和优先队列的使用详解
Mar 05 Python
python实现在函数图像上添加文字和标注的方法
Jul 08 Python
Python3内置模块random随机方法小结
Jul 13 Python
使用Python 自动生成 Word 文档的教程
Feb 13 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
详解Python中如何将数据存储为json格式的文件
Nov 18 Python
用Python 执行cmd命令
Dec 18 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
Python+Matplotlib+LaTeX玩转数学公式
Feb 24 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
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
chrome浏览器不支持onmouseleave事件的解决技巧
2013/05/31 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
href下载文件根据id取url并下载
2014/05/28 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
JavaScript中的对象与JSON
2015/07/03 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
Vue入门之animate过渡动画效果
2018/04/08 Javascript
如何编写一个d.ts文件的步骤详解
2018/04/13 Javascript
vue 刷新之后 嵌套路由不变 重新渲染页面的方法
2018/09/13 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
微信小程序开发实现消息推送
2020/11/18 Javascript
基于原生js实现判断元素是否有指定class名
2020/07/11 Javascript
Python实现的ini文件操作类分享
2014/11/20 Python
Java Web开发过程中登陆模块的验证码的实现方式总结
2016/05/25 Python
python的dataframe转换为多维矩阵的方法
2018/04/11 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
python中的TCP(传输控制协议)用法实例分析
2019/11/15 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
浅谈keras中的keras.utils.to_categorical用法
2020/07/02 Python
python时间序列数据转为timestamp格式的方法
2020/08/03 Python
python中Django文件上传方法详解
2020/08/05 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
python程序实现BTC(比特币)挖矿的完整代码
2021/01/20 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
以下为Windows NT 下的32 位C++程序,请计算sizeof 的值
2016/12/07 面试题
餐饮业创业计划书范文
2014/01/06 职场文书
建筑总经理岗位职责
2014/02/02 职场文书
婚前协议书范本
2014/04/15 职场文书
2014年教务处工作总结
2014/12/03 职场文书
简历自荐信范文
2015/03/09 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Nginx域名转发https访问的实现
2021/03/31 Servers