Python-用公共模式替换列表中的条目

Python-用公共模式替换列表中的条目,python,regex,Python,Regex,我有一个不同URL的python列表。我正试图从中提取域名 list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com'] 我正在尝试转换上述内容,以便最终输出如下: list1 = ['www.google.com','www.yahoo.com','www.facebook.com'] 按.com拆分并与.com连接,因为假定您希望它们都以这样的方式结束: list1 = ['wwww.google.com.my',

我有一个不同URL的python列表。我正试图从中提取域名

list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com']
我正在尝试转换上述内容,以便最终输出如下:

list1 = ['www.google.com','www.yahoo.com','www.facebook.com']
按.com拆分并与.com连接,因为假定您希望它们都以这样的方式结束:

list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com']

print([e.split(".co")[0] + ".com" for e in list1])
输出:


假设您不想将.co改为.com,那么您可以尝试:

list2 = ['.'.join(url.split('.')[:3]) for url in list1]

您可以使用正则表达式来解析输入并构建所需的实际结果

例如,这个正则表达式找到域并将其植入www.domain.com模式中,有很多其他模式可以使用

import re
list2 = [re.sub(r'w*\.?(\w+)\..*', r'www.\1.com', x) for x in list1]

我在列表中添加了一些URL,以处理所有可能的不同类型

list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com',
'https://stackoverflow.com/questions/','https://google.co.in',
'https://stackoverflow.co.uk/questions/','www.stackoverflow.co.uk/questions/']
代码如下:

new_list=[]

list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com',
'https://stackoverflow.com/questions/','https://google.co.in',
'https://stackoverflow.co.uk/questions/','www.stackoverflow.co.uk/questions/']

for item in list1:
    if(item[:4]!='http'):
        url1='www.'+item.split(".")[1]+'.com'
        if(item.split('/')[0])==item:
            new_list.append(url1)
        else:
            length=len(item.split('/'))
            url2=''
            for i in range(1,length):
                url2=url2+'/'+item.split('/')[i]
            url1=url1+url2
            new_list.append(url1)
    if(item[:4]=='http'):
        url1='www.'+item.split('://')[1]
        url1='www.'+url1.split('.')[1]+'.com'
        if(item.split('/'))[2]==item[8:]:
            new_list.append(url1)
        else:
            length=len(item.split('/'))
            url2=''
            for i in range(3,length):
                url2=url2+'/'+item.split('/')[i]
            url1=url1+url2
            new_list.append(url1)
In [1]:new_list
Out[1]: 
['www.google.com',
 'www.yahoo.com',
 'www.facebook.com',
 'www.stackoverflow.com/questions/',
 'www.google.com',
 'www.stackoverflow.com/questions/',
 'www.stackoverflow.com/questions/']
上述代码中的新_列表将被视为输出,如下所示:

new_list=[]

list1 = ['wwww.google.com.my','www.yahoo.co.jp','www.facebook.com',
'https://stackoverflow.com/questions/','https://google.co.in',
'https://stackoverflow.co.uk/questions/','www.stackoverflow.co.uk/questions/']

for item in list1:
    if(item[:4]!='http'):
        url1='www.'+item.split(".")[1]+'.com'
        if(item.split('/')[0])==item:
            new_list.append(url1)
        else:
            length=len(item.split('/'))
            url2=''
            for i in range(1,length):
                url2=url2+'/'+item.split('/')[i]
            url1=url1+url2
            new_list.append(url1)
    if(item[:4]=='http'):
        url1='www.'+item.split('://')[1]
        url1='www.'+url1.split('.')[1]+'.com'
        if(item.split('/'))[2]==item[8:]:
            new_list.append(url1)
        else:
            length=len(item.split('/'))
            url2=''
            for i in range(3,length):
                url2=url2+'/'+item.split('/')[i]
            url1=url1+url2
            new_list.append(url1)
In [1]:new_list
Out[1]: 
['www.google.com',
 'www.yahoo.com',
 'www.facebook.com',
 'www.stackoverflow.com/questions/',
 'www.google.com',
 'www.stackoverflow.com/questions/',
 'www.stackoverflow.com/questions/']
让我知道这对你是否足够有效

编辑:由于这是一个基于特定用例的查询,因此没有通用的解决方案,因此我没有提到任何使用.gov或.edu等的地址。这些用例可以根据需要附加到上面的代码中。
此外,这可能会更改地址,并将一个global.com url输出到一个可能不全局存在的网站。

这对于Python中的list是无效的语法。您尝试过什么?显示你的代码。尝试搜索正则表达式。www.yahoo.co.jp到底是如何变成www.yahoo.com的?我想知道你从哪里得到这些URL的。以…结尾的域名。我的?www.yahoo.co.jp可能是雅虎日本分公司的有效域名,那么为什么要将其切换到.com?哇,真的吗?一个只适用于.com/.co URL的解决方案?@Aran-Fey。看看这个问题。因为OP希望www.yahoo.co.jp访问www.yahoo.com。你还有什么建议?返回www.yahoo.co而不是“www.yahoo.com”我知道。我写道,在我看来,没有必要将其更改为.com,因为.co仍然是一个有效的域。我在等待OP对这件事的澄清。但不是想要的输出。这个打印['www.google.com.my','www.yahoo.co.jp','www.facebook.com']谢谢,我编辑了我的答案,用\W替换了\W,这样周期就不会被吞没了。