返回字符串中的所有非重叠模式,作为字符串或元组列表。左右扫描字符串,匹配在找到的顺序中返回。结果包含空匹配。
结果取决于模式中捕获组的数量。它的结果不一定是列表。
如果没有分组,则返回与整个模式匹配的字符串列表。
如果恰好有一个组,请返回匹配该组的字符串列表。
如果存在多个组,则返回与组匹配的字符串的元组列表。
非捕获组不会影响结果的形式。
正因为这样多变的特性,所以我们在没有理解小括号的全部意义的时候,findall的返回结果会让我们莫名其妙。
例子1:查找a1b22c333d4444e5555,中所有【一个字母+2个及以上数字】的匹配结果。
这是我们最常见的用法。比较简单。
例子2:这里我们对【一个字母+2个及以上数字】的【2个及以上数字】进行分组。加上括号。
结果已经变了。这个在理解了分组之后,也很好理解。使用了分组之后,findall不会输出分组以外的内容。
例子3:如果我们又要使用分组功能,又想要输出全部内容,那么就在整体外面再加一个括号。
看到元组列表中,每个元组的第一项就是全部内容的结果。
如果存在多个组,则返回与组匹配的字符串的元组列表。。上面例子3就是也可以当做案例。
我们讲例子2中的小括号弄成非捕获组。