关于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 相关文章推荐
用ReactJS和Python的Flask框架编写留言板的代码示例
Dec 19 Python
Python插件virtualenv搭建虚拟环境
Nov 20 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
详解如何用django实现redirect的几种方法总结
Nov 22 Python
python制作mysql数据迁移脚本
Jan 01 Python
Flask框架踩坑之ajax跨域请求实现
Feb 22 Python
pycharm创建一个python包方法图解
Apr 10 Python
pyqt5移动鼠标显示坐标的方法
Jun 21 Python
pandas中的series数据类型详解
Jul 06 Python
Pytorch基本变量类型FloatTensor与Variable用法
Jan 08 Python
pytorch实现Tensor变量之间的转换
Feb 17 Python
python使用pymongo与MongoDB基本交互操作示例
Apr 09 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
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
php url路由入门实例
2014/04/23 PHP
PHP使用GIFEncoder类处理gif图片实例
2014/07/01 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
CI框架表单验证实例详解
2016/11/21 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
Laravel 队列使用的实现
2019/01/08 PHP
PHP中关于php.ini参数优化详解
2020/02/28 PHP
jquery last-child 列表最后一项的样式
2010/01/22 Javascript
js 多浏览器分别判断代码
2010/04/01 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
JavaScript 学习笔记之数据类型
2015/01/14 Javascript
学习JavaScript设计模式(封装)
2015/11/26 Javascript
BootStrap Select清除选中的状态恢复默认状态
2017/06/20 Javascript
AngularJS实现表格的增删改查(仅限前端)
2017/07/04 Javascript
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
基于JavaScript实现简单抽奖功能代码实例
2020/10/20 Javascript
[02:43]DOTA2亚洲邀请赛场馆攻略——带你走进东方体育中心
2018/03/19 DOTA
Python中处理字符串之islower()方法的使用简介
2015/05/19 Python
简介二分查找算法与相关的Python实现示例
2015/08/26 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
tensorflow中next_batch的具体使用
2018/02/02 Python
对Python正则匹配IP、Url、Mail的方法详解
2018/12/25 Python
python爬虫 execjs安装配置及使用
2019/07/30 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
Django后端按照日期查询的方法教程
2021/02/28 Python
HTML5 Canvas中绘制椭圆的4种方法
2015/04/24 HTML / CSS
工程师岗位职责
2013/11/08 职场文书
小学运动会广播稿200字(十二篇)
2014/01/14 职场文书
司马光教学反思
2014/02/01 职场文书
保安岗位职责
2014/02/21 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
《落花生》教学反思
2016/02/16 职场文书
Java实现学生管理系统(IO版)
2022/02/24 Java/Android
Nginx中使用Lua脚本与图片的缩略图处理的实现
2022/03/18 Servers