Это связано с тем, что ??
является ленивым, а ?
является жадный. И ленивый квантификатор будет соответствовать нулю или единице (его левый токен), нулю, если это все еще позволяет соответствовать общему шаблону. Например, все следующее вернет пустую строку:
>>> print(re.search('a??','a').group())
>>> print(re.search('a??','aa').group())
>>> print(re.search('a??','aaaa').group())
И регулярное выражение a??b
будет соответствовать ab
или b
:
>>> print(re.search('a??b','aaab').group())
ab
>>> print(re.search('a??b','aacb').group())
b
И если это не позволяет совпадать с общим шаблоном и не было никакого b
, он вернет None :
>>> print(re.search('a??b','aac').group())
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
А что касается второй части, у вас есть нежадное регулярное выражение, и результат очень очевиден. Он будет соответствовать любому количеству a
, а затем b
:
print(re.search('a*?b','aaab').group())
aaab
person
kasravnd
schedule
11.07.2015