如何理解python regex编译匹配结果:`re.compile(r'a *')`

时间:2018-09-26 02:44:30

标签: python regex

import re

pattern = re.compile(r'a*')

pattern.findall("aba")

结果:

['a', '', 'a', '']

为什么结果中没有空匹配?如何理解这一点?

更具体地说,结果中的两个空匹配-''在字符串“ aba” 中代表什么?

3 个答案:

答案 0 :(得分:0)

findall(pattern,string,flags = 0)¶

以字符串列表形式返回字符串中所有不重复的模式匹配项。从左到右扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。 空匹配项包含在结果中。

答案 1 :(得分:0)

让我尝试解释一下,因为我也找不到关于输出的良好信息。 documentation声明

  

re.findall(pattern, string, flags=0)

     

以字符串列表形式返回字符串中所有不重复的模式匹配项。从左到右扫描该字符串,并以找到的顺序返回匹配项。如果该模式中存在一个或多个组,则返回一个组列表;否则,返回一个列表。如果模式包含多个组,则这将是一个元组列表。空匹配项包含在结果中。

     

版本3.7中的更改:现在可以在上一个空匹配之后立即开始非空匹配。

import re

text = 'abcaad'
print(f"'a'  matches {re.findall('a' , text)}")
print(f"'a+' matches {re.findall('a+', text)}")
print(f"'a*' matches {re.findall('a*', text)}")
print(f"'z*' matches {re.findall('z*', text)}")

输出为

'a'  matches ['a', 'a', 'a']
'a+' matches ['a', 'aa']
'a*' matches ['a', '', '', 'aa', '', '']
'z*' matches ['', '', '', '', '', '', '']
  1. a与字符a完全匹配三次。

  2. a+匹配出现的字符a一个更多

  3. a*匹配出现字符a more
    除了匹配aaa之外,它也不匹配bcd和整个字符串。

  4. z*匹配出现字符z more
    不匹配abcaad和整个字符串

答案 2 :(得分:0)

您正在搜索a**匹配零个或多个字符重复。因此ba*匹配,其他任何事情也是如此。似乎您想要a+来代替,它匹配一个或多个字符重复。