r - 计算字符串的一部分的字符

标签 r strsplit

我有这个df:

dput(df)
structure(list(URLs = c("http://bursesvp.ro//portal/user/_/Banco_Votorantim_Cartoes/0-7f2f5cb67f1-22918b.html", 
"http://46.165.216.78/.CartoesVotorantim/Usuarios/Cadastro/BV6102891782/", 
"http://www.chalcedonyhotel.com/images/promoc/premiado.tam.fidelidade/", 
"http://bmbt.ro/portal/a3/_Votorantim_/VotorantimCartoes2016/0-7f2f5cb67f1-22928b.html", 
"http://voeazul.nl/azul/")), .Names = "URLs", row.names = c(NA, 
-5L), class = "data.frame")

它描述了不同的URL,并且我试图计算主机名的字符数,无论这是实际名称(http://hostname.com/...。)或IP(http://000.000.000.000/..。)。但是,如果它是一个真实的名称,那么我只想要www之间的nchar。和.com。如果是IP,则其所有数字和“在”点之间。

以上示例数据的预期结果:
exp_outcome
1           8
2          13
3          15
4           4
5           7

我试图用strsplit做点什么,但是什么也做不了。

最佳答案

另一种,也许更直接的方式是使用不同的正则表达式:

nchar(sub("^http://(www\\.)?(([a-z]+)|([0-9.]+))(\\.[a-z]+)?/+.+$", "\\2", x$df))
#[1]  8 13 15  4  7

说明:
  • ^http://:在字符串
  • 开头后查找“http://”
  • (www\\.)?:查找“www。”,零次或一次(因此这是可选的)
  • (([a-z]+)|([0-9.]+)):将捕获的模式:小写字母一个或多个时间或数字和点
  • (\\.[a-z]+)?:查找“。”后面跟一个或多个小写字母,零或一次(因此也是可选的)
  • /+.+$:查找“/”,后跟任何东西,一次或多次,直到字符串
  • 末尾

    注意:
    sub("^http://(www\\.)?(([a-z]+)|([0-9.]+))(\\.[a-z]+)?/+.+$", "\\2", x$df)
    # [1] "bursesvp"        "46.165.216.78"   "chalcedonyhotel" "bmbt"            "voeazul"  
    

    关于r - 计算字符串的一部分的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34770900/

    相关文章:

    r - 使用带有多个分隔符的 strsplit

    html - 在 R 中进行网络抓取时如何修复 HTTP 403 错误?

    r - R中的n臂老虎机模拟

    list - 如何避免R中的循环:从列表中选择项目

    regex - R中将段落拆分成句子

    R Strsplit 将分隔符保留在第二个元素中

    r - 将 R 中的向量运算符的 drop 永久设置为 FALSE

    java - 将稀疏矩阵从 R 移至 Java

    r - 查找唯一行

    regex - 使用先行断言正则表达式拆分字符串