关于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获取指定网页上所有超链接的方法
Apr 04 Python
解密Python中的描述符(descriptor)
Jun 03 Python
python获取文件扩展名的方法
Jul 06 Python
Python中操作符重载用法分析
Apr 29 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
Aug 07 Python
利用Python读取txt文档的方法讲解
Jun 23 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
Python pygorithm模块用法示例【常见算法测试】
Aug 16 Python
Python连接Mssql基础教程之Python库pymssql
Sep 16 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
python实现根据给定坐标点生成多边形mask的例子
Feb 18 Python
python实现KNN近邻算法
Dec 30 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
老机欣赏|中国60年代精品收音机
2021/03/02 无线电
咖啡风味 世界咖啡主要分布分布 咖啡的生长要求
2021/03/06 新手入门
php 生成WML页面方法详解
2009/08/09 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
php中使用addslashes函数报错问题的解决方法
2013/02/06 PHP
PHP中CURL的CURLOPT_POSTFIELDS参数使用细节
2014/03/17 PHP
Yii2针对指定url的生成及图片等的引入方法小结
2016/07/18 PHP
使用jQuery简化Ajax开发 Ajax开发入门
2009/10/14 Javascript
跟着Jquery API学Jquery之一 选择器
2010/04/07 Javascript
原生javascript实现拖动元素示例代码
2014/09/01 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
JS+CSS实现精美的二级导航效果代码
2015/09/17 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
利用JQUERY实现多个AJAX请求等待的实例
2017/12/14 jQuery
Vue底层实现原理总结
2018/02/17 Javascript
JS中数组实现代码(倒序遍历数组,数组连接字符串)
2019/12/29 Javascript
python enumerate函数的使用方法总结
2017/11/15 Python
Django后端接收嵌套Json数据及解析详解
2019/07/17 Python
pandas DataFrame 警告(SettingWithCopyWarning)的解决
2019/07/23 Python
HTML5中使用postMessage实现Ajax跨域请求的方法
2016/04/19 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
客服专员岗位职责范本
2013/11/29 职场文书
如何客观的进行自我评价
2013/12/17 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
离婚协议书范文
2015/01/26 职场文书
个人年度总结报告
2015/03/09 职场文书
致地震灾区的慰问信
2015/03/23 职场文书
关于观后感的作文
2015/06/18 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
写作技巧:如何撰写商业计划书
2019/08/08 职场文书
Apache POI的基本使用详解
2021/11/07 Servers
python的html标准库
2022/04/29 Python
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js