先看一个例子:
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()返回的是括号所匹配到的结果,多个括号就会返回多个括号分别匹配到的结果,
如果没有括号就返回就返回整条语句所匹配到的结果。
参考链接:http://www.imooc.com/article/302796
注:这个特性是正则表达式特有的,而不仅仅只是python语言。