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

时间:2010-12-07 03:00:10

标签: python string split

我已经潜伏了几个星期,并决定加入,以便更多地学习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('.')将每个地址字符串拆分为子字符串? = /

我很确定这在其他地方得到了某种程度的回答,但我真的找不到完全相似的东西。我为超级苛刻的问题道歉,并承诺我的问题会随着我的学习而提高质量。

3 个答案:

答案 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大师那里知道哪种方法在这种情况下更快,哪种方法可以更好地处理更大的字符串。

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