我已经潜伏了几个星期,并决定加入,以便更多地学习Python。
我要做的是获取包含多个网址的单个字符串,并提供一个包含域名为2-4个字符的所有地址的列表。假设地址不是所有simple.com类型,它们可能包含多个句点。这是我想要转换的示例字符串:
urlstring = 'albatross.org,boogaloo.boolean.net,zenoparadox.hercules.gr,takeawalkon.the.wildside,fuzzy.logic.it,bronzeandiron.age,areyou.serious'
获取列表中的地址:list(urlstring.split(','))
。但我无法确定如何识别域名的长度,并根据该长度删除它。是否有必要通过split('.')
将每个地址字符串拆分为子字符串? = /
我很确定这在其他地方得到了某种程度的回答,但我真的找不到完全相似的东西。我为超级苛刻的问题道歉,并承诺我的问题会随着我的学习而提高质量。
答案 0 :(得分:1)
假设您只关心顶级域名的长度:
[url for url in urlstring.split(',') if 2 <= len(url.split('.')[-2]) <= 4]
答案 1 :(得分:0)
或者,如果您想获取至少具有至少一个所需或长度正确的域名的网址,您可以尝试以下代码:
def len_is_valid(url, min_len, max_len):
return any(map(lambda x: min_len<=len(x)<=max_len,url))
urlstring = 'albatross.org,boogaloo.boolean.net,zenoparadox.hercules.gr,takeawalkon.the.wildside,fuzzy.logic.it,bronzeandiron.age,areyou.serious'
url_list = [url for url in urlstring.split(',')
if len_is_valid(url.split('.'), 2, 4)]
print url_list
# ['albatross.org', 'boogaloo.boolean.net', 'zenoparadox.hercules.gr',
# 'takeawalkon.the.wildside', 'fuzzy.logic.it', 'bronzeandiron.age']
答案 2 :(得分:0)
不知道哪一个更快或更好的方法,但这里有一个使用正则表达式:
import re urls = 'albatross.org,boogaloo.boolean.net,bedei9.paralex.zenoparadox.herc.gr,takeawalkon.the.wildside,fuzzy.logic.it,bronzeandiron.age,areyou.serious,mydom.dom.net,hun.com' regex = re.compile('''[[a-zA-Z0-9\-\.]+\.]*[a-zA-Z0-9\-]{2,4}\.[^\.\,]+''') url_list = regex.findall(urls) print(url_list)
注意:我使用了re.compile但是如果你只解析它一次那么你就没有了,你可以简单地做re.findall(patern,urls)并留下一个衬里(在导入之后当然):
url_list = re.findall('''[[a-zA-Z0-9\-\.]+\.]*[a-zA-Z0-9\-]{2,4}\.[^\.\,]+''', urls)
我还修改了你给出的字符串,以确保它处理了几个重复的abc.abd.abdcde,bdc...
。
如果有一些正则表达的大师正在观看并且您认为自己可以做得更好,请发布它,我会喜欢更快/更准确的解决方案:)。
另外我想从python大师那里知道哪种方法在这种情况下更快,哪种方法可以更好地处理更大的字符串。
我应该发一个问题吗? :)