python re模块findall()详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python re模块findall()详解相关的知识,希望对你有一定的参考价值。

今天写代码,在写到郑泽的时候遇到了一个坑,这个坑是re模块下的findall()函数。

下面我将结合代码,记录一下

import re

string="abcdefg  acbdgef  abcdgfe  cadbgfe"

#带括号与不带括号的区别
#不带括号
regex=re.compile("((\w+)\s+\w+)")
print(regex.findall(string))
#输出:[(‘abcdefg  acbdgef‘, ‘abcdefg‘), (‘abcdgfe  cadbgfe‘, ‘abcdgfe‘)]

regex1=re.compile("(\w+)\s+\w+")
print(regex1.findall(string))
#输出:[‘abcdefg‘, ‘abcdgfe‘]

regex2=re.compile("\w+\s+\w+")
print(regex2.findall(string))
#输出:[‘abcdefg  acbdgef‘, ‘abcdgfe  cadbgfe‘]

第一个 regex 中是带有2个括号的,我们可以看到其输出是一个list 中包含2个 tuple 

第二个 regex 中带有1个括号,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果。

第三个 regex 中不带有括号,其输出的内容就是整个表达式所匹配到的内容。

 

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

 

以上是关于python re模块findall()详解的主要内容,如果未能解决你的问题,请参考以下文章

Python之正则re模块 --- findall()详解

Python 正则re模块之compile()和findall()详解

Python re 模块findall() 函数返回值展现方式详解

python re 模块 findall 函数用法简述

Python3正则匹配re.split,re.finditer及re.findall函数用法详解

python re模块findall使用