You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

链接格式多变时,如何用substr()提取目标子串?

解决URL中灵活提取项目名称的问题

嘿,这个问题我刚好处理过!不用死磕substr()的固定起始结束位置——毕竟URL的前缀长度不固定(带www.是11字符,不带是8字符),用正则表达式来灵活匹配才是最优解,既能适配带不带www.的情况,还能轻松提取你要的项目名。

方法1:基础R实现(无需额外包)

直接用基础R的sub()函数结合正则,就能一步到位:

list <- c("https://www.gatcoin.io/wp-content/uploads/2017/08/GATCOIN-Whitepaper_ENG-1.pdf", 
          "https://appcoins.io/pdf/appcoins_whitepaper.pdf", 
          "https://pareto.network/download/Pareto-Technical-White-Paper.pdf", 
          "http://betbox.ai/BetBoxBizWhitepaper.pdf", 
          "https://www.aidcoin.co/assets/documents/whitepaper.pdf")

# 正则匹配+转小写
result <- tolower(sub("^https?://(www\\.)?(.*?)\\..*", "\\2", list))
print(result)

正则规则解释:

  • ^https?://:匹配URL开头的http://或https://(?表示s是可选的)
  • (www\\.)?:匹配可选的www.部分(?表示这一段可有可无)
  • (.*?):非贪婪匹配,提取到第一个.之前的所有内容(也就是我们要的项目名)
  • \\..*:匹配第一个.之后的所有内容(域名后缀+文件路径)
  • \\2:引用正则中第二个捕获组的内容(就是我们提取到的项目名)
  • tolower():把结果转成小写,完全符合你的期望输出

方法2:用stringr包(更直观的tidyverse风格)

如果你习惯用tidyverse系列工具,stringr包的str_extract()会更直观:

library(stringr)

result <- tolower(str_extract(list, "(?<=https?://(www\\.)?)[^.]+"))
print(result)

正则规则解释:

  • (?<=https?://(www\\.)?):正向回顾断言,确保提取的内容前面是http(s)://或http(s)://www.
  • [^.]+:匹配所有不是.的字符,直到遇到第一个.,刚好就是项目名

两种方法的输出都是你想要的:

[1] "gatcoin"  "appcoins" "pareto"   "betbox"   "aidcoin"

内容的提问来源于stack exchange,提问作者Carolin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:00:11