新手求分解域名=>(主机名 ,域名,后缀)完美正则-_-!

多加旺 2011-12-21 02:31:14
将域名解析为 (主机名 ,域名,后缀)
例如:
www.baidu.com => ("www.","baidu",".com")
abc.baidu.com.cn => ("abc.","baidu",".com.cn")
baidu.com => ("www.","baidu",".com")
baidu.com.cn => ("www.","baidu",".com.cn")
www.wx.js.cn => ("www.","wx",".js.cn")
wx.js.cn => ("www.","wx",".js.cn")

后缀不单单.com .net .cn,而是要所有的可能形式.com.info.net.me.mobi.org.us.biz.xxx.ca.mx.tv.ws.com.ag.net.ag.org.ag.ag .js.cn 还有很多

我的正则:
([a-z0-9_-]{1,32}\.)+([a-z0-9_-]{1,32})((\.[a-z]{2,4})(.[a-z]{1,2})?)"

说明:
主机: ([a-z0-9_-]{1,32}\.)+
域名: ([a-z0-9_-]{1,32})
后缀: ((\.[a-z]{2,4})(.[a-z]{1,2})?)"

我的代码:

import re

def phraseDomainName(namestr):
if namestr.count('''.''')<1:
return False
if namestr.count('''.''')==1:
namestr="www."+namestr;
regex="([a-z0-9_-]{1,32}\.)+([a-z0-9_-]{1,32})((\.[a-z]{2,4})(.[a-z]{1,2})?)"
match = re.search(regex,namestr)
if match.group(1)!= None:
hostname=match.group(1)
else:
hostname=""
if match.group(2)!= None:
domain=match.group(2)
else:
return False
if match.group(3)!= None:
suffix=match.group(3)
else:
return False
return (hostname,domain,suffix)

while True:
domain=input("input url:")
print(phraseDomainName(domain))
input("end")


当前遇到wx.js.cn abc.com.cn 不能正确解析
...全文
377 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
libralibra 2011-12-22
  • 打赏
  • 举报
回复
昨天漏看了最后一个wx.js.cn这个二级域名,把.js.cn添加到list就ok了

#! /usr/bin/env python

def parseURL(url):
lookList = ['.com.cn','.js.cn'] # expand this list if necessary
backList = ['.comcn','.jscn'] # mapped to lookList one by one

# replace 2nd level domain
for i in range(len(lookList)):
if lookList[i] in url:
url = url.replace(lookList[i],backList[i])

# split
if url.count('.')==1 and not url.startswith('www.'):
url = 'www.'+url
firstDot = url.index('.')
secondDot = url[firstDot+1:len(url)].index('.')+firstDot+1

# recover 2nd level domain
for i in range(len(backList)):
if backList[i] in url:
url = url.replace(backList[i],lookList[i])

# return
return (url[:firstDot],url[firstDot+1:secondDot],url[secondDot+1:])

def main():
testurl = ['www.baidu.com','abc.baidu.com.cn','baidu.com','baidu.com.cn','www.wx.js.cn','wx.js.cn']
for url in testurl:
print url, parseURL(url)

if __name__=='__main__':
main()


结果:
>>> ================================ RESTART ================================
>>>
www.baidu.com ('www', 'baidu', 'com')
abc.baidu.com.cn ('abc', 'baidu', 'com.cn')
baidu.com ('www', 'baidu', 'com')
baidu.com.cn ('www', 'baidu', 'com.cn')
www.wx.js.cn ('www', 'wx', 'js.cn')
wx.js.cn ('www', 'wx', 'js.cn')
>>>
libralibra 2011-12-21
  • 打赏
  • 举报
回复
没用正则,纯字符串处理,但是二级域名例如.com.cn这种,如果有多个,需自己扩充替换list,这个不会很多的.

代码

#! /usr/bin/env python

def parseURL(url):
lookList = ['.com.cn'] # expand this list if necessary
backList = ['.comcn'] # mapped to lookList one by one

for i in range(len(lookList)):
if lookList[i] in url:
url = url.replace(lookList[i],backList[i])

if url.count('.')==1 and not url.startswith('www.'):
url = 'www.'+url
firstDot = url.index('.')
secondDot = url[firstDot+1:len(url)].index('.')+firstDot+1

for i in range(len(backList)):
if backList[i] in url:
url = url.replace(backList[i],lookList[i])

return (url[:firstDot],url[firstDot+1:secondDot],url[secondDot+1:])

def main():
testurl = ['www.baidu.com','abc.baidu.com.cn','baidu.com','baidu.com.cn','www.wx.js.cn','wx.js.cn']
for url in testurl:
print url, parseURL(url)

# unit test
if __name__=='__main__':
main()


测试结果:

www.baidu.com ('www', 'baidu', 'com')
abc.baidu.com.cn ('abc', 'baidu', 'com.cn')
baidu.com ('www', 'baidu', 'com')
baidu.com.cn ('www', 'baidu', 'com.cn')
www.wx.js.cn ('www', 'wx', 'js.cn')
wx.js.cn ('wx', 'js', 'cn')

iambic 2011-12-21
  • 打赏
  • 举报
回复
先把单元测试写出来。
angel_su 2011-12-21
  • 打赏
  • 举报
回复
加判断嘛,简单字符串处理就好,用正则貌似更乱了...
多加旺 2011-12-21
  • 打赏
  • 举报
回复
我加www.是为了域名的完整性,满足下面的判断。

例如abc.com wx.js.cn 需要加
我的代码只判断了只有一个点的情况加了"www."
xuzhijian17 2011-12-21
  • 打赏
  • 举报
回复
前面没www的也要加上www吗
代码转载自:https://pan.quark.cn/s/50df8825dc0d Tensilica Xtensa指令集架构手册是一份详尽阐述Xtensa指令集架构(ISA)的参考指南,它主要面向Tensilica公司所推出的处理器核心,尤其是LX106核,同时亦涵盖了ESP8266和ESP32等相关内容。该手册全面介绍了Xtensa处理器核心的指令集、配置选项、扩展能力以及将架构映射至硬件的详细情况。接下来将依据手册中所述的知识点进行深入解读。 ### Xtensa指令集架构(ISA) Xtensa指令集架构是Tensilica公司为其处理器产品设计的一套指令集,该指令集具备高度的可配置性和可扩展性。这一特性使得Xtensa ISA能够在不同的应用领域和硬件需中进行个性化定制,以满足特定的功能与性能要。 #### 可配置性(Configurability) Xtensa ISA的可配置性体现在用户可以根据实际需对处理器的多个方面进行定制。这包括但不限于: - **指令集扩展**:用户可以根据特定的应用需添加新的指令,从而提升处理特定任务的效率。 - **寄存器文件扩展**:根据应用需,可以增加或优化处理器的寄存器数量和类型。 - **协处理器扩展**:通过集成特定的协处理器,可以将专门的计算任务卸载到协处理器上,从而提升整体性能。 #### 可扩展性(Extensibility) Xtensa ISA不仅可配置,还拥有卓越的可扩展性,它支持多种扩展,包括: - **状态扩展(State Extensions)**:允许处理器添加新的状态寄存器,以支持新的功能或增强现有功能。 - **指令扩展(Instruction Extensions)**:...

37,738

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧