当我尝试解析" 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)
答案 0 :(得分:1)
{1}}中缺少/
:
start
另请注意,start = 'http://www.'
在Regex中具有特殊含义,它是一个匹配任何单个字符的正则表达式标记,而不是文字.
。您需要将其转义为文字,即.
。
所以你最好这样做:
\.
答案 1 :(得分:1)
您收到错误,因为没有匹配项。您的模式不正确,因为它与单个/
匹配,而在/
后有http:
个。您需要修改heemayl建议的模式,或者使用替代的基于urlparse
的解决方案来获取netloc
部分,并获取第一个和最后一个点之间的部分(使用find
和rfind
或正则表达式:
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组之间的内容。