【发布时间】:2011-04-29 11:06:34
【问题描述】:
我需要一个在 gVim 中使用的正则表达式,它将从 URL 列表中删除重复的域(gVim 可以在此处下载:http://www.vim.org/download.php
我在一个 .txt 文件中有超过 6,000,000 个 URL 的列表(在 gVim 中打开以进行编辑)。
网址采用以下格式:
http://www.example.com/some-url.php
http://example2.com/another_url.html
http://example3.com/
http://www.example4.com/anotherURL.htm
http://www.example.com/some-url2.htm
http://example.com/some-url3.html
http://www.example2.com/somethingelse.php
http://example5.com
换句话说,URL 没有特定的格式。有些有 WWW,有些没有,它们都有不同的格式。
我需要一个为 gVim 编写的正则表达式,它将从列表中删除所有重复的 DOMAIN(以及相应的 URL),留下它找到的第一个实例。
因此它将采用上面发布的示例列表,最终结果应如下所示:
http://www.example.com/some-url.php
http://example2.com/another_url.html
http://example3.com/
http://www.example4.com/anotherURL.htm
http://example5.com
这里有两个很好的网站,它们很好地解释了如何在 gVim 中使用正则表达式:
http://www.softpanorama.org/Editors/Vimorama/vim_regular_expressions.shtml
【问题讨论】:
-
你能告诉我们一些你迄今为止尝试过的例子吗?查找/删除我发现的重复项的一个技巧是首先对列表进行排序。这是一个巨大的文件,所以这对您来说可能是一个困难的选择,但它也可能使您的正则表达式更加简单。
-
gVim 实际上有一个非常好的内置功能,用于对 URL 进行排序,所以这完全没有问题。我只需键入以下内容并按回车:sort u 按字母顺序对所有行进行排序,然后删除重复的 LINES(不是域)。至于展示一些例子,我还没有走得太远。这是一个(我实际上是从这个站点得到的,但 gVim 说它不是一个公认的命令或正则表达式)stackoverflow.com/questions/2280666/…
-
根据 gvim 的文档,输入您要执行的操作的格式应该是这种格式: :start_point,end_points/search_pattern/replacement_pattern/g 这个 URL 给出了一些简单的例子 147.188.192.43/documentation/tutorials/docsystem/build/… ...但是我对正则表达式的了解一无所有...直到今天,我什至没有听说过。