导语:
本文主要介绍了关于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独有的,是正则独有的,任何高级语言都用正则来满足这个特性:有括号的时候,只能匹配括号里的内容,没有括号的【相当于最外层加括号]。正则表达式中,“()”表示分组,中括号表示分组,只能匹配“()”中的内容。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ python中defaultdict的初始化12/16
- ♥ 如何使用python3输出csv文件?10/06
- ♥ 如何在 linux 中打开 python12/03
- ♥ python全局图像二值化01/01
- ♥ 如何在python中传递可变参数11/10
- ♥ python遍历树的方法12/11
内容反馈