如何解决正则表达式从列表的根域中删除子域-Notepad ++或Gvim
|| 我有一个存储在.txt文件中的URL列表(我使用Windows 7)。 URL的格式是这样的:somesite1.com
somesite2.com
somesite3.com
sub1.somesite3.com
sub2.somesite3.com
sub3.somesite3.com
sub1.somesite3.net
sub1.somesite1.org
在notepad ++中,有一个选项可以使用\“使用正则表达式查找替换\”,并且我相当确定gvim允许用户使用正则表达式(尽管我不完全确定如何在Gvim中使用它们)。 )。
无论如何,我不知道要在“查找和替换”框中放入什么,以便它可以浏览文件的内容并使我仅拥有根域。如果做得正确,它将上面的示例列表变成这样:
somesite1.com
somesite2.com
somesite3.com
somesite3.com
somesite3.com
somesite3.com
somesite3.net
somesite1.org
有人可以帮我吗?
解决方法
Vim的几种实现方法(斜杠也是可选的):
:%s/^.\\+\\.\\ze[^.]\\+\\.[^.]\\+$//
:%s/^.\\+\\.\\([^.]\\+\\.[^.]\\+\\)$/\\1/
另请参见:help /\\ze
等。\\ze
和\\zs
是Vim特定的并且非常有用。在Vim和PCRE中也有一些有用的前向断言断言。
我相信Notepad ++使用PCRE;找到^.+\\.([^.]+\\.[^.]+)$
并替换为\\1
应该可以工作(但我不使用Notepad ++)。
请注意,这对于使用第三级注册的国家或地区代码顶级域名无法很好地解决-example.com.au
将变成com.au
。然后有些国家在某些规则下使用二级或三级注册...如果您关心这些情况,您将需要更多规则,并且完整的解析器比常规表达式更整洁(尽管像往常一样)正则表达式是可能的)。
, 将^[^.]*\\.(?=\\w+\\.\\w+$)
替换为<blank>
解密后,这意味着:
^
=行首
[^.]*
=任意数量的非点字符
\\.
=点
(?=[^.]+\\.[^.]+$)
=必须有一个完全正确的单词,一个点,然后是一个单词,从这里到结尾
编辑-增加了展望另一个点
再次编辑-更改了单词之间正好一个点的前瞻
, 将整行替换为一个的最后一个单词和上一个单词。
%s/^.*\\.\\(\\w\\+\\.\\w\\+\\)$/\\1/g
注意vim需要+17(
18ѭ19
更新:
%s/^.*\\.\\([0-9a-z\\-]\\+\\.[0-9a-z\\-]\\+\\)$/\\1/g
也许更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。