搜索

首页  >  问答  >  正文

正则 re.findall(r'x?','xy123'),x 重复 0 次是什么意思?

>>> 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 中没有它啊?!

巴扎黑巴扎黑2944 天前1013

全部回复(1)我来回复

  • 面对疾风吧

    面对疾风吧2016-11-09 16:48:10

    'xy123' 长度为 5 ,所以 re.findall 最多可以在 5 个位置尝试匹配。 
    第一个位置是在字符串首,匹配到了 'x'。 
    然后跳过匹配到的字符串,移到 'y' 前面,进行第二次匹配尝试,匹配到 ''。 
    然后往前移动一个字符,即 'y' 和 '1' 中间,进行第三次匹配尝试,匹配到 ''。 
    然后往前移动一个字符,即 '1' 和 '2' 中间,进行第四次匹配尝试,匹配到 ''。 
    然后往前移动一个字符,即 '2' 和 '3' 中间,进行第五次匹配尝试,匹配到 ''。 
    然后往前移动一个字符,即串尾,结束所有匹配尝试。 

    任何文本都包含 ''。

    回复
    0
  • 取消回复