【问题标题】:extracting all .com, .in, .co.in from all elements从所有元素中提取所有 .com、.in、.co.in
【发布时间】:2015-12-11 19:09:31
【问题描述】:

我在 csv 中有数据,其中包含以下列

ARTICLE_URL
http://twitter.com/aviryadsh/statuses/528219883872337920
http://www.ibtimes.co.in/2014

我想在此列旁边创建另一个列,其中我只能拥有像 twitter.com, team-bhp.com, ibtimes.co.in,broadbandforum.co 这样的网址。

我试过了

text$ne=str_extract(Brand$ARTICLE_URL, '\\w+(.com)')

但这只是给出以 .com 结尾的 url 如何获取所有其他的。

【问题讨论】:

  • 你可以使用一个复杂的正则表达式,或者两个简单的字符串替换。简单的字符串替换如下所示:tmp <- str_replace(Brand$ARTICLE_URL, "http://(www.)?", ""); text$ne <- str_replace(tmp, "/.*", "")
  • 感谢马克的回复。但问题是在这个特定的列中,一些单元格包含 http://,一些包含 https://,一些以 www 开头。只是,我可以在这里给出或条件以获得所有可能的组合或任何其他方式的任何方式也是如此......请提供您的宝贵意见。
  • str_replacestr_replace_all 可以采用正则表达式来查找模式。所以我们可以稍微修改一下代码的第一部分:str_replace_all(Brand$ARTICLE_URL, "https://|http://|www.", "")。这应该会删除 URL 开头的所有内容。

标签: r stringr


【解决方案1】:

在这种情况下,我建议使用字符串替换而不是字符串提取。可以用字符串提取来做,但是正则表达式有点混乱,不像两步字符串替换方法那样可读。这是我的做法:

urls <- c("http://twitter.com/aviryadsh/statuses/528219883872337920", "http://www.ibtimes.co.in/2014", "https://www.ibtimes.co.in/2014")
tmp <- stringr::str_replace_all(urls, "https?://|www.", "")
domains <- stringr::str_replace_all(tmp, "/.*", "")

然后查看我们的输出:

domains
# [1] "twitter.com"   "ibtimes.co.in" "ibtimes.co.in"

【讨论】:

  • 真的很抱歉对“brittenb”和“Marc B”提供如此大的帮助表示衷心的感谢。它工作正常,正是我想做的。但还有一件事想了解“?”的作用。登录 "https?://|www.", "") 你能帮我理解一下吗。
  • 没问题!问号用于表示前面的字符可以有 0 或 1。因此,在这种情况下,这意味着 http 部分中有“s”或没有“s”。基本上,它允许使用 http 和 https URL。这有意义吗?
猜你喜欢
  • 1970-01-01
  • 2021-03-11
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多