知行编程网知行编程网  2022-12-28 13:30 知行编程网 隐藏边栏  14 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python正则表达式findall函数详解的相关知识,希望可以帮到处于编程学习途中的小伙伴

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 个括号,我们可以看到输出是一个包含 2 个元组的列表

第二个正则表达式中有一个括号,输出的内容是括号匹配的内容,而不是整个表达式匹配的结果。

第三个正则表达式没有括号,输出的内容就是整个表达式匹配的内容。

结论:findall()返回括号匹配的结果(如regex1),多括号会返回多个括号匹配的结果(如regex),没有括号则返回整条语句匹配的结果结果(例如 regex2)。所以提取数据的时候需要注意这个坑。

其实不是python独有的,是正则独有的,任何高级语言都用正则来满足这个特性:有括号的时候,只能匹配括号里的内容,没有括号的【相当于最外层加括号]。正则表达式中,“()”表示分组,中括号表示分组,只能匹配“()”中的内容。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享