gpt4 book ai didi

regex - 如何从大量 URL 列表中删除重复域?正则表达式或其他

转载 作者:行者123 更新时间:2023-12-01 13:04:19 25 4
gpt4 key购买 nike

我最初问这个问题:Regular Expression in gVim to Remove Duplicate Domains from a List

但是,我意识到,如果我在愿意接受的解决方案方面“扩大范围”,我可能更有可能找到可行的解决方案。

所以,我将重新表述我的问题,也许我会得到更好的解决方案...这里是:

我在 .txt 文件中有大量 URL(我运行的是 Windows Vista 32 位),我需要删除重复的域(以及每个重复项的整个对应 URL),同时留下每个域的第一次出现.这个特定文件中大约有 6,000,000 个 URL,格式如下(URL 中显然没有空格,我不得不这样做,因为我没有足够的帖子在这里发布那么多“实时”URL ):

http://www.exampleurl.com/something.phphttp://exampleurl.com/somethingelse.htm  http://exampleurl2.com/another-url  http://www.exampleurl2.com/a-url.htm  http://exampleurl2.com/yet-another-url.html  http://exampleurl.com/  http://www.exampleurl3.com/here_is_a_url  http://www.exampleurl5.com/something

无论解决方案是什么,使用上述作为输入的输出文件应该是这样的:

http://www.exampleurl.com/something.php  http://exampleurl2.com/another-url  http://www.exampleurl3.com/here_is_a_url  http://www.exampleurl5.com/something

您注意到现在没有重复的域,它留下了它遇到的第一个匹配项。

如果有人能帮助我,无论是使用正则表达式还是一些我不知道的程序,那就太好了。

尽管如此,我要说的是,我没有使用 Windows 操作系统以外的任何东西的经验,所以一个解决方案需要一些不同于 Windows 程序的东西,可以说需要一点“婴儿步”(如果有人足够友善的话)这样做)。

最佳答案

Python 中的正则表达式,非常原始,不适用于子域。基本概念是使用字典键和值,键将是域名,如果键已经存在,值将被覆盖。

import re

pattern = re.compile(r'(http://?)(w*)(\.*)(\w*)(\.)(\w*)')
urlsFile = open("urlsin.txt", "r")
outFile = open("outurls.txt", "w")
urlsDict = {}

for linein in urlsFile.readlines():
match = pattern.search(linein)
url = match.groups()
domain = url[3]
urlsDict[domain] = linein

outFile.write("".join(urlsDict.values()))

urlsFile.close()
outFile.close()

您可以扩展它以过滤掉子域,但我认为基本思想就在那里。对于 600 万个 URL,在 Python 中可能需要相当长的时间...

Some people, when confronted with a problem, think "I know, I'll use regular expressions." Now they have two problems. −−Jamie Zawinski, in comp.emacs.xemacs

关于regex - 如何从大量 URL 列表中删除重复域?正则表达式或其他,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4002511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com