正则表达式提取R中的特定域名

时间:2018-10-21 19:27:49

标签: r regex stringr

我有成千上万个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的正则表达式感兴趣。

2 个答案:

答案 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"