python3中`re.findall(r'(.)*', 'aabc')`结果的原因

The reason of the result of `re.findall(r'(.)*', 'aabc')` in python3

re.findall(r'(.)*', 'aabc') 将 return ['c', ''] 而不是 ['a', 'a', 'b', 'c', ''].这是为什么?

谢谢

您的模式说匹配一个字符的一组捕获 (.) 零次或多次 *

这个模式有两个匹配项。首先,它将 'aabc' 匹配为 (.) (单个字符的捕获组)四次。 findall 中的结果将是捕获组的内容,即 c,因为您的组捕获的最后一件事是 c.

找到的第二个匹配项是空字符串(这是一个匹配项,因为 * 可能表示 "zero times"),在这种情况下,捕获组中没有任何内容被捕获,您得到一个空字符串结果。

如果你想要结果['a', 'a', 'b', 'c', ''],你可以使用

re.findall(r'.?', 'aabc')

即"match any single character optionally".