AttributeError:' NoneType'对象没有属性' group'无法解析(Python)

时间:2016-08-23 10:11:06

标签: python regex python-2.7

当我尝试解析" bloomberg"时,我收到以下错误在self.web_url之外。 self.web_url的类型是unicode,所以我假设这可能是原因。但是,我不知道如何在必要时执行类型转换或如何执行

self.web_url = "http://www.bloomberg.com"
start = "http:/www."
    end = ".com")
    print type(self.web_url)
    web_name = re.search('%s(.*)%s' % (start, end), self.web_url).group(1)

2 个答案:

答案 0 :(得分:1)

{1}}中缺少/

start

另请注意,start = 'http://www.' 在Regex中具有特殊含义,它是一个匹配任何单个字符的正则表达式标记,而不是文字.。您需要将其转义为文字,即.

所以你最好这样做:

\.

答案 1 :(得分:1)

您收到错误,因为没有匹配项。您的模式不正确,因为它与单个/匹配,而在/后有http:个。您需要修改heemayl建议的模式,或者使用替代的基于urlparse的解决方案来获取netloc部分,并获取第一个和最后一个点之间的部分(使用findrfind或正则表达式:

import urlparse, re
path = urlparse.urlparse("http://www.bloomberg.com")
print(path.netloc[path.netloc.find(".")+1:path.netloc.rfind(".")]) # => bloomberg
# or a regex:
print(re.sub(r"\A[^.]*\.(.*)\.[^.]*\Z", r"\1", path.netloc)) # => bloomberg
# or Regex 2:
mObj = re.search(r"\.(.*)\.", path.netloc);
if mObj:
    print(mObj.group(1)) # => bloomberg

请参阅Python demo

Regex 1 - \A[^.]*\.(.*)\.[^.]*\Z - 将匹配字符串(\A)的开头,然后是0 +非. s([^.]*),然后是一个点( \.),然后将除了换行符之外的任何0 +字符捕获到第1组,然后将.和0+非.匹配到字符串的最后( \Z)。

正则表达式2将匹配第一个.,然后匹配任意0个字符,直到上一个.捕获.到第1组之间的内容。