关于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使用urllib2获取网络资源实例讲解
Dec 02 Python
Python实现中文数字转换为阿拉伯数字的方法示例
May 26 Python
详解python中的 is 操作符
Dec 26 Python
PyQT实现多窗口切换
Apr 20 Python
python smtplib模块自动收发邮件功能(一)
May 22 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
python文字转语音实现过程解析
Nov 12 Python
Django Admin后台模型列表页面如何添加自定义操作按钮
Nov 11 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
python 如何执行控制台命令与操作剪切板
May 20 Python
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 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
Zend Framework框架中实现Ajax的方法示例
2017/06/27 PHP
laravel手动创建数组分页的实现代码
2018/06/07 PHP
PHP数据源架构模式之表入口模式实例分析
2020/01/23 PHP
js异或加解密效果代码
2008/06/25 Javascript
最简单的js图片切换效果实现代码
2011/09/24 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
原生Ajax 和jQuery Ajax的区别示例分析
2014/12/17 Javascript
js完美实现@提到好友特效(兼容各大浏览器)
2015/03/16 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
jQuery垂直多级导航菜单代码分享
2015/08/18 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
angularjs自定义ng-model标签的属性
2016/01/21 Javascript
jQuery实现摸拟alert提示框
2016/05/22 Javascript
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
js仿微信语音播放实现思路
2016/12/12 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
vue使用Element组件时v-for循环里的表单项验证方法
2018/06/28 Javascript
Vue slot用法(小结)
2018/10/22 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
解决csv.writer写入文件有多余的空行问题
2018/07/06 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
python语言的优势是什么
2020/06/17 Python
keras的三种模型实现与区别说明
2020/07/03 Python
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
CSS3 实现弹幕的示例代码
2017/08/07 HTML / CSS
html5中的input新属性range使用记录
2014/09/05 HTML / CSS
Nike挪威官网:Nike.com (NO)
2018/11/26 全球购物
大一自我鉴定范文
2013/10/04 职场文书
不假外出检讨书
2014/01/27 职场文书
文明演讲稿范文
2014/05/12 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
财政专业大学生职业生涯规划书
2014/09/17 职场文书
三峡大坝导游词
2015/01/31 职场文书
Python一行代码实现自动发邮件功能
2021/05/30 Python