【问题标题】:Remove the end of a URL string in R在 R 中删除 URL 字符串的结尾
【发布时间】:2013-03-24 19:46:05
【问题描述】:

我正在尝试从 R 中的 URL 列表中清理和删除目录

我有什么:

http://domain.com/123
http://www.sub.domain1.com/222
http://www.domain2.com/1233/abc

我想要什么:

domain.com
sub.domain1.com
domain2.com

我还有一段路要清理 URL 的开头

url <- c("http://domain.com/123", "http://www.sub.domain1.com/222","http://www.domain2.com/1233/abc"

cleanurl <- gsub("http://","",url)
cleanurl2 <- gsub("www.","",cleanurl)

(如果有更简单的方法来清理 http:// 和 www.,请告诉我。)

现在我遇到了正则表达式问题,并在最后删除了 / 之后的所有内容。 这个我试过了

cleanurl3 <- gsub("/*","",cleanurl2)

但它只是删除了/,而不是它之后的所有内容。

提前感谢您的帮助!

【问题讨论】:

  • 尝试使用“\/*”(那里有一个反斜杠)。我认为斜线应该被转义。看看这是否有效。
  • 我试过了,但它给了我这个错误 > cleanurl3
  • 您的第二个表达式不会删除斜线,因为/* 匹配任意数量的/ 字符。你想要/.*

标签: regex r


【解决方案1】:

我的方法是使用strsplit/gsub 组合(不仅仅是gsub b/c,有时它会很快找出strsplit,因为它非常直观):

x <- readLines(n=3)
http://domain.com/123
http://www.sub.domain1.com/222
http://www.domain2.com/1233/abc

gsub("www.", "", sapply(strsplit(x, "//|/"), "[", 2))

## > gsub("www.", "", sapply(strsplit(x, "//|/"), "[", 2))
## [1] "domain.com"      "sub.domain1.com" "domain2.com"

编辑
或者,如果您只想使用 strsplit(根据 Matthew 的建议):

sapply(strsplit(x, "(//|/)(www[.])?"), "[", 2)

【讨论】:

  • (+1) 感谢您展示了 R 正则表达式的强大功能,我刚刚意识到我可以通过这些不错的条件等来改进我的一些代码。
  • 新的 strsplit-only 答案不会删除 www.。怎么样:sapply(strsplit(x, "(//|/)(www[.])?"), "[", 2)
  • 好电话我会根据您的建议添加它。我实际上并没有尝试我的解决方案。应该有:)
【解决方案2】:

对于第一个:

cleanurl <- sub("^http://(?:www[.])?(.*)$", "\\1", url)
cleanurl
## [1] "domain.com/123"       "sub.domain1.com/222"  "domain2.com/1233/abc"

只是域:

cleanurl <- sub("^http://(?:www[.])?([^/]*).*$", "\\1", url)
cleanurl
## [1] "domain.com"      "sub.domain1.com" "domain2.com" 

【讨论】:

  • 可以将 "^http:" 更改为 "^https?:" 甚至泛化为 "^[^/]+:" 以获取 ftp 等。此外,"sub" 也可以在这里作为“gsub”(两者都是矢量化的)。
【解决方案3】:

这应该可行:

cleanurl <- gsub("http://","",url)
cleanurl2 <- gsub("www.","",cleanurl)

sapply(strsplit(cleanurl2,"/"),"[",1)
[1] "domain.com"      "sub.domain1.com"
[3] "domain2.com" 

【讨论】:

  • 是的,有效!谢谢!我有一个问题,你为什么使用“[”?我看不出它是如何适应的。
  • 这是索引的快捷方式,因为[ 实际上是一个函数。
  • "["sapply使用的函数。函数strplit返回一个列表,使用sapply我们提取列表组件的第一个元素(1是“[”的参数),所以同样可以由x&lt;-strsplit(cleanurl2,"/");c(x[[1]][1],x[[2]][1],x[[3]][1])手动完成
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 2021-03-17
  • 1970-01-01
相关资源
最近更新 更多