栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Python正则表达式 findall函数详解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python正则表达式 findall函数详解

在写正则表达式的时候总会遇到不少的问题, 特别是在表达式有多个元组的时候。下面看下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特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容

原文来源:https://m.pythontab.com/article/1262


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/222071.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号