我想使用 substr()从网络链接中提取名称。我的问题是模式略有不同,所以我不知道如何解释差异。这是一个示例:
INPUT:
state = {
allGenres: [
{
id: 1,
genreTitle: 'Horror',
isSelected: false,
}
]
}
我想要的输出
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")
根据我的理解,我需要指定要提取的字符串的开头和结尾,但有时会以“https://”开头,而有时则为“https://www”。
我怎么能解决这个问题?
答案 0 :(得分:2)
您可以使用stringr
...
library(stringr)
str_match(list, "\\/(www\\.)*(\\w+)\\.")[,3]
[1] "gatcoin" "appcoins" "pareto" "betbox" "aidcoin"
正则表达式提取斜杠和可选www.
之间的第一个字母序列,以及下一个点。
基数R中的等价物略显混乱......
sub(".+?\\/(?:www\\.)*(\\w+)\\..+", "\\1", list)
这也会添加字符串的开头和结尾,只用你想要的捕获组替换整个批次。它将可选www.
设置为非捕获组,如果找不到第一个组,则sub
和str_match
的行为会有所不同。
答案 1 :(得分:1)
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")
pattern <- c("https://", "www.", "http://")
for(p in pattern) list <- gsub(p, "", list)
unlist(lapply(strsplit(list, "[.]"), function(x) x[1]))
[1] "gatcoin" "appcoins" "pareto" "betbox" "aidcoin"
答案 2 :(得分:1)
您可以使用Regular Expressions。然而,那就是重新发明轮子。人们已经考虑过如何在使用现有函数之前拆分URL。
例如httr包的parse_url
。或谷歌“R解析URL”替代。
urls <- list("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")
使用lapply
对parse_url
urls
parsed <- lapply(urls, httr::parse_url)
现在您有一个列表列表。列表parsed
的每个元素本身都有多个元素,其中包含URL的各个部分。
提取所有元素parsed[[...]]$hostname
:
hostname <- sapply(parsed, function(e) e$hostname)
按点分割它们并取第二个元素:
domain <- strsplit(hostname, "\\.")
domain <- sapply(domain, function(d) d[length(d)-1])
答案 3 :(得分:0)
此正则表达式捕获://(www.)
之后的单词。
(?::\/\/(?:www.)?)(\w+)