Python: ОК, чтобы объединить регулярное выражение и группу в одну строку? - PullRequest
0 голосов
/ 29 октября 2019

Во многих уроках Python показан пример использования re в две строки.

match=re.search('aa?yushi','ayushi')
match.group()

Рекомендуется ли комбинировать два стиля?

re.search('aa?yushi','ayushi').group()

Я пытался, но не получилось.

re.match('\d','a1b2c3d').group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>

В чем прикол?

Ответы [ 2 ]

3 голосов
/ 29 октября 2019

Это законно, но не рекомендуется, потому что нет гарантии, что регулярное выражение действительно совпадает;когда он не совпадает, он возвращает 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 литералах, и в регулярных выражениях это не сработало бы.

0 голосов
/ 29 октября 2019

На самом деле вы можете в Python 3.7

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...