【问题标题】:The reason of the result of `re.findall(r'(.)*', 'aabc')` in python3python3中`re.findall(r'(.)*', 'aabc')`结果的原因
【发布时间】:2020-05-16 21:30:38
【问题描述】:

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

谢谢

【问题讨论】:

    标签: python python-3.x regex python-re


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-08-15
      • 1970-01-01
      • 2017-07-13
      • 1970-01-01
      • 1970-01-01
      • 2013-04-09
      • 2017-07-05
      • 1970-01-01
      相关资源
      最近更新 更多