关于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进阶教程之词典、字典、dict
Aug 29 Python
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
Apr 17 Python
快速解决PyCharm无法引用matplotlib的问题
May 24 Python
windows下pycharm安装、创建文件、配置默认模板
Jul 31 Python
对python Tkinter Text的用法详解
Oct 11 Python
python多进程使用及线程池的使用方法代码详解
Oct 24 Python
Python3 log10()函数简单用法
Feb 19 Python
梅尔频率倒谱系数(mfcc)及Python实现
Jun 18 Python
django框架CSRF防护原理与用法分析
Jul 22 Python
centos7中安装python3.6.4的教程
Dec 11 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
浅谈keras中loss与val_loss的关系
Jun 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
php ss7.5的数据调用 (笔记)
2010/03/08 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
php判断文件上传图片格式的实例详解
2017/09/30 PHP
XENON基于JSON变种
2010/07/27 Javascript
一个JS的日期格式化算法示例
2013/07/31 Javascript
Javascript alert消息换行的方法
2013/08/07 Javascript
js获取光标位置和设置文本框光标位置示例代码
2014/01/09 Javascript
javascript 获取函数形参个数
2014/07/31 Javascript
jQuery实现的简单动态添加、删除表格功能示例
2017/09/21 jQuery
浅谈Vue服务端渲染框架Nuxt的那些事
2018/12/21 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
搞笑的程序猿:看看你是哪种Python程序员
2015/06/12 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
Python爬取当当、京东、亚马逊图书信息代码实例
2017/12/09 Python
关于反爬虫的一些简单总结
2017/12/13 Python
Python机器学习算法之k均值聚类(k-means)
2018/02/23 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
Python调用C++,通过Pybind11制作Python接口
2018/10/16 Python
Python进阶之自定义对象实现切片功能
2019/01/07 Python
详解Anaconda 的安装教程
2020/09/23 Python
HTML5 canvas标签实现刮刮卡效果
2015/04/24 HTML / CSS
乐高积木玩具美国官网:LEGO Shop US
2016/09/16 全球购物
英国领先的男装设计师服装独立零售商:Repertoire Fashion
2020/10/19 全球购物
党员教师工作决心书
2014/03/13 职场文书
《二泉映月》教学反思
2014/04/15 职场文书
三万活动总结
2014/04/28 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
我是一名护士演讲稿
2014/08/28 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
让子弹飞观后感
2015/06/11 职场文书
保姆聘用合同
2015/09/21 职场文书
高中生社会实践心得体会
2016/01/14 职场文书