python正则表达式对(.*)*是如何匹配的呢

今天突然想知道正则对(.*)*的匹配过程是怎么的,于是自己测试了下,对代码的输出有点看不明白。
代码如下:

>>>reg1=re.compile(r'(.*)*?')
>>>text='fffffff'
>>> reg1.findall(text)
['', '', '', '', '', '', '', '']
————————————————————
>>>reg2=re.compile(r'(.*)*')
>>> reg2.findall(text)
['', '']

很迷茫,比如reg2匹配为什么出输出两个'',reg1的匹配又为什么是一堆的''而不是'f'
向大家求教下
ps:贪婪和非贪婪的区别我是清楚的,但嵌套在一起就不明白顺序了....

阅读 2.1k
1 个回答

python3

>>> for m in reg1.finditer(text):
    print(m.span(),m.group(),m.groups())

    
(0, 0)  (None,)
(1, 1)  (None,)
(2, 2)  (None,)
(3, 3)  (None,)
(4, 4)  (None,)
(5, 5)  (None,)
(6, 6)  (None,)
(7, 7)  (None,)

>>> for m in reg2.finditer(text):
    print(m.span(),m.group(),m.groups())

    
(0, 7) fffffff ('',)
(7, 7)  ('',)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题