拆分要检查的字符串>列表

2024-10-06 07:46:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经潜伏了几个星期,决定加入进来,以便更多地亲身体验Python的学习。在

我要做的是获取一个字符串,包含多个web地址,然后列出一个包含所有地址的列表,域名为2-4个字符。假设的地址并不是全部简单网站类型,它们可能包含多个句点。下面是我要转换的示例字符串:

urlstring = 'albatross.org,boogaloo.boolean.net,zenoparadox.hercules.gr,takeawalkon.the.wildside,fuzzy.logic.it,bronzeandiron.age,areyou.serious'

要获取列表中的地址:list(urlstring.split(','))。但我无法确定如何辨别域名的长度,并根据该长度删除它。是否需要按split('.')将每个地址字符串拆分为子字符串?=/

我很确定这在其他地方也有答案,但我真的找不到完全相似的东西。我为这个超级愚蠢的问题道歉,并保证我的问题会随着我的学习而提高质量。在


Tags: 字符串orgweb示例类型列表网站地址
3条回答

或者,如果您想获取至少有一个所需或长度正确的域名的所有URL,您可以尝试以下代码:

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']

不知道哪种方法更快或更好,但下面是一种使用regex的方法:

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)

注意:我使用重新编译但是如果你只解析一次,那么你就不必了,你可以简单地做关于芬德尔(patern,url)并保留一行代码(当然在导入之后):

^{pr2}$

我还修改了您给出的字符串,以确保它处理了abc.abd.abdcde,bdc...的多次重复。在

如果一些regex专家正在观看,并且您认为您可以做得更好,请发布它,我希望有一个更快/更准确的解决方案:)。在

另外,我想从python专家那里知道在这种情况下哪个方法更快,哪个方法处理更大的字符串更好。在

我应该发问这个问题吗?:)

假设您只关心TLD的长度:

[url for url in urlstring.split(',') if 2 <= len(url.split('.')[-2]) <= 4]

相关问题 更多 >