Python + Regex: AttributeError: объект "NoneType" не имеет атрибутных "групп",

У меня есть строка, которую я хочу извлечь подмножество. Это часть более крупного Python script.

Это строка:

import re

htmlString = '</dd><dt> Fine, thank you.&#160;</dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'

Который я хочу вытащить "Molt bé, gràcies. mohl behh, GRAH-syuhs". И для этого я использую регулярное выражение, используя re.search:

SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'

Result = re.search(SearchStr, htmlString)

print Result.groups()
AttributeError: 'NoneType' object has no attribute 'groups'

Так как Result.groups() не работает, то также не нужно делать выделения (т.е. Result.group(5) и Result.group(7)). Но я не понимаю, почему я получаю эту ошибку? Регулярное выражение работает в TextWrangler, почему бы и нет в Python? Я новичок в Python.

Ответ 1

import re

htmlString = '</dd><dt> Fine, thank you.&#160;</dt><dd> Molt bé, gràcies. (<i>mohl behh, GRAH-syuhs</i>)'

SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ ([\w\,\s\w\s\w\?\!\.]+) (\(\<i\>)([\w\s\,\-]+)(\<\/i\>\))'

Result = re.search(SearchStr.decode('utf-8'), htmlString.decode('utf-8'), re.I | re.U)

print Result.groups()

Работает так. Выражение содержит нелатинские символы, поэтому он обычно терпит неудачу. Вы должны декодировать в Unicode и использовать флаг re.U(Unicode).

Я тоже начинающий, и я сам пару раз сталкивался с этим вопросом.

Ответ 2

Вы получаете AttributeError, потому что вы вызываете groups на None, у которого нет каких-либо методов.

regex.search return None означает, что регулярное выражение не может найти ничего, соответствующего шаблону из предоставленной строки.

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

Result = re.search(SearchStr, htmlString)

if Result:
    print Result.groups()

Ответ 3

import re your_multicastip = "224.0.0.0 - 239.255.255.255" if ([224 <= int (x) <240 для x в re.split('.', re.match(r "^\d+.\[ CN10].\d+.\d+ $ ", your_multicastip).group(0))]. Count (True) == 4): print ("% s является действительным IP-адресом многоадресной рассылки ", your_multicastip) else: print ("% s не является действительным IP-адресом многоадресной рассылки", your_multicastip)

вход

Traceback (последний вызов был последним):
Файл "/home/main.py", строка 3, в
if ([224 <= int (x) <240 для x в re.split('.', re.match(r "^\d+.\d+.\d+.\d+ $.", your_multicastip).group(0))] рассчитывать (True) == 4):
AttributeError: у объекта 'NoneType' нет атрибута 'группа'

Ответ 4

import re 
your_multicastip = "239.255.666.275"
if([224<=int(x)<240 for x in re.split('\.',re.match(r"^2(?:2[4-9]|3\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d?|0)){3}$",your_multicastip).groups())].count(True)==1):
    print("%s is a valid multicast ip address",your_multicastip)    
else:
    print("%s is not a valid multicast ip address",your_multicastip)

Трассировки стека:

Traceback (most recent call last):
  File "source_file.py", line 3, in <module>
    if([224<=int(x)<240 for x in re.split('\.',re.match(r"^2(?:2[4-9]|3\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d?|0)){3}$",your_multicastip).groups())].count(True)==1):
AttributeError: 'NoneType' object has no attribute 'groups'

Я новичок в Python, и я столкнулся с этой проблемой в случае "другого".