Это законно, но не рекомендуется, потому что нет гарантии, что регулярное выражение действительно совпадает;когда он не совпадает, он возвращает None
, а None
не имеет .group
метода, поэтому вы получаете менее полезное сообщение об ошибке, как вы видели.
В вашем случае выслучайно вызвал это, используя re.match
вместо re.search
;re.match
неявно привязывается в начале строки, поэтому:
re.match('\d','a1b2c3d').group()
завершается ошибкой, поскольку проверяемая строка не начинается с цифры. По конкурсу, это будет нормально работать с re.search
, который не имеет неявной привязки:
re.search(r'\d','a1b2c3d').group()
Примечание: я использовал необработанную строку для шаблона регулярного выражения, потому что вы должны всегда использоватьнеобработанные строки для регулярных выражений;в этом случае он работает без него, но только случайно и только в Python (поскольку Python принимает решение рассматривать нераспознанные escape-символы как буквальные обратные слэши; если ваш шаблон использовал \a
, \b
или многие другие escape-символы, которые имеютэто означает, что и в str
литералах, и в регулярных выражениях это не сработало бы.