首页 > 解决方案 > python3中`re.findall(r'(.)*', 'aabc')`结果的原因

问题描述

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

谢谢

标签: pythonpython-3.xregexre

解决方案


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

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

找到的第二个匹配项是空字符串(这是一个匹配项,因为*它可能意味着“零次”),在这种情况下,捕获组中没有捕获任何内容,因此您会得到一个空字符串。

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

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

这是“可选地匹配任何单个字符”。


推荐阅读