python re模块findall()详解
Posted joneylulu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 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特有的,这是 正则 所特有的 , 任何一门高级语言使用正则都满足这个特点:有括号时只能匹配到括号中的内容,没有括号【相当于在最外层增加了一个括号】。在正则里面 “()” 代表的是分组的意思,一个括号代表一个分组,你只能匹配到"()"中的内容
以上是关于python re模块findall()详解的主要内容,如果未能解决你的问题,请参考以下文章
Python 正则re模块之compile()和findall()详解
Python re 模块findall() 函数返回值展现方式详解