我有成千上万个URL,我想提取域名。我正在使用以下正则表达式来做到这一点:http://|https://|www\\.
这样可以像这样提取域:
elpais.com
veren.elpais.com
canaris7.es
vertele.eldiario.es
eldiario.es
问题是我只想提取域-即vertele.eldiario.es和eldiario.es都应该给我eldiario.es。
我也曾经使用过urltools
,但是它似乎并没有完成任务。我需要提取域,因为我需要在所有URL中正确计数特定域。我对可以提取以.com和.es结尾的TLD的正则表达式感兴趣。
答案 0 :(得分:2)
与.*\\.(.*\\.(com|es))
一起使用的正则表达式sub
用来调用组(位于括号之间)将完成此操作。
url <- c(
"http://www.elpais.com",
"http://www.veren.elpais.com",
"http://www.canaris7.es",
"http://www.vertele.eldiario.es",
"http://www.eldiario.es"
)
sub(".*\\.(.*\\.(com|es))", "\\1", url)
[1] "elpais.com" "elpais.com" "canaris7.es" "eldiario.es" "eldiario.es"
根据@Corion对其他答案的评论进行编辑:
如果您担心url具有更复杂的后缀,则可以使用:
.*\\.(.*\\.(com|es)).*
url <- c(
"http://www.elpais.com",
"http://www.veren.elpais.com",
"http://www.canaris7.es",
"http://www.vertele.eldiario.es",
"http://www.eldiario.es",
"http://www.google.es.hk",
"http://www.google.com.br"
)
sub(".*\\.(.*\\.(com|es)).*", "\\1", url)
[1] "elpais.com" "elpais.com" "canaris7.es" "eldiario.es" "eldiario.es"
[6] "google.es" "google.com"
答案 1 :(得分:1)
我认为您只需要URL的最后两个部分。您可以从sub
和正则表达式中获得该信息。
URLs = c("http://www.elpais.com",
"http://veren.elpais.com",
"http://www.canaris7.es",
"http://vertele.eldiario.es",
"http://eldiario.es")
sub(".*\\b(\\w+\\.\\w+)", "\\1", URLs)
[1] "elpais.com" "elpais.com" "canaris7.es" "eldiario.es" "eldiario.es"