Почему регулярное выражение возвращает ошибку в python?

Я пытаюсь выполнить следующее регулярное выражение в python, но он возвращает ошибку

import re ... #read a line from a file to variable line # loking for the pattern 'WORD' in the line ... m=re.search('(?<=[WORD])\w+',str(line)) m.group(0) 

Я получаю следующую ошибку:

AttributeError: объект 'NoneType' не имеет атрибута 'group'

Это происходит потому, что регулярное выражение не было согласовано. Поэтому m является None и, конечно, вы не можете получить доступ к группе [0]. Вам нужно сначала проверить, что поиск был успешным, прежде чем пытаться получить доступ к членам группы.

Два вопроса:

  1. ваш шаблон не совпадает, поэтому m установлено в None , а None не имеет атрибута group .

  2. Я полагаю, вы имели в виду:

     m= re.search(r"(?<=WORD)\w+", str(line)) 

    как указано, или

     m= re.search(r"(?P<WORD>\w+)", str(line)) 

    Первый соответствует «abc» в «WORDabc def»; последний соответствует «abc» в «abc def», а объект match будет иметь .group("WORD") содержащий «abc». (Использование строк r "" обычно является хорошей идеей при указании регулярных выражений.)

Документация re.search гласит :

Возврат Нет, если никакая позиция в строке не соответствует шаблону; обратите внимание, что это отличается от поиска совпадения нулевой длины в некоторой точке строки.

 >>> help(re.search) Help on function search in module re: search(pattern, string, flags=0) Scan through string looking for a match to the pattern, returning a match object, or None if no match was found. 

Посмотрите на последнюю строку: возврат Нет, если совпадение не найдено

BTW, ваше регулярное выражение неверно. Если вы ищете «СЛОВО», это должно быть просто «СЛОВО». str также является посторонней. Ваш код должен выглядеть так:

 m = re.search('WORD', line) if m: print m.group[0] 

Ваше исходное регулярное выражение вернет, вероятно, неожиданные и нежелательные результаты:

 >>> m = re.search('(?<=[WORD])\w+', 'WORDnet') >>> m.group(0) 'ORDnet'