导语:
本文主要介绍了关于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独有的,是正则独有的,任何高级语言都用正则来满足这个特性:有括号的时候,只能匹配括号里的内容,没有括号的【相当于最外层加括号]。正则表达式中,“()”表示分组,中括号表示分组,只能匹配“()”中的内容。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在 python3 循环中添加换行符?10/30
- ♥ 如何在python3中创建一个新文件10/25
- ♥ python3 os输出文件路径的方法有哪些?01/05
- ♥ python如何将列表变成数组09/30
- ♥ c如何与python交互12/21
- ♥ python中if和try的区别11/03
内容反馈