>>> re.findall(r'xy','xy123') #从源文本 xy123 中找 xy 刚好找到一个。
['xy']
>>> re.findall(r'x','xy123') #从源文本 xy123 中找 x 刚好找到一个。
['x']
>>> re.findall(r'x?','xy123')
['x', '', '', '', '', '']
最后这个实在无法理解,
从中找 x 重复 0 次或者 1 次,如果 x 重复 1 次,得到 x,
关键是重复 0 次怎么理解?输出的结果里有 5 个表示空东西的东西,但是源文本 xy123 中没有它啊?!
'xy123' 长度为 5 ,所以 re.findall 最多可以在 5 个位置尝试匹配。
第一个位置是在字符串首,匹配到了 'x'。
然后跳过匹配到的字符串,移到 'y' 前面,进行第二次匹配尝试,匹配到 ''。
然后往前移动一个字符,即 'y' 和 '1' 中间,进行第三次匹配尝试,匹配到 ''。
然后往前移动一个字符,即 '1' 和 '2' 中间,进行第四次匹配尝试,匹配到 ''。
然后往前移动一个字符,即 '2' 和 '3' 中间,进行第五次匹配尝试,匹配到 ''。
然后往前移动一个字符,即串尾,结束所有匹配尝试。
任何文本都包含 ''。