Python正则表达式findall函数详解
发布时间:2025-09-29 11:05:31
写正则表达式的时候总会遇到很多问题, 特别是当表达式有多个元组时。让我们来看看re模块下的findall()函数遇到多个表达式元组时会出现什么样的坑。
代码如下
importre str="abcd" 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))
输出结果
[('ab','a'),('cd','c')] ['a','c'] ['ab','cd']
结果可能有点出乎意料。让我们解释一下
第一个正则表达式有两个括号,我们可以看到它的输出是列表 中包含2个 tuple
第二个正则表达式中有一个括号,其输出是括号匹配的内容,而不是整个表达式匹配的结果。
第三个正则表达式中没有括号,输出的内容与整个表达式相匹配。
结论:findall()返回括号匹配的结果(如regex1),多个括号返回多个括号匹配的结果(如regex),如果没有括号返回整个句子匹配的结果(如regex2)。因此,在提取数据时需要注意这个坑。
事实上,它并不是python独有的,这是真的 正则 所特有的 , 任何高级语言使用正则都符合这一特点:当有括号时,只能与括号中的内容相匹配,没有括号[相当于在最外层添加括号]。在正则中 “()” 代表分组的意思,括号代表分组,你只能匹配"()"中的内容。
下一篇 Python和单元测试那些事儿