R 如果模式发生变化,则从字符串中提取子字符串

R 如果模式发生变化,则从字符串中提取子字符串,r,regex,web-scraping,substring,stringr,R,Regex,Web Scraping,Substring,Stringr,我想使用substr()从Web链接中提取名称。我的问题是模式略有不同,因此我不确定如何解释差异。以下是一个示例: 输入: 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-Te

我想使用substr()从Web链接中提取名称。我的问题是模式略有不同,因此我不确定如何解释差异。以下是一个示例:

输入:

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://”


我怎样才能解决这个问题

list
list您可以使用
stringr
轻松做到这一点

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" 
library(stringr)

str_match(list, "\\/(www\\.)*(\\w+)\\.")[,3]

[1] "gatcoin"  "appcoins" "pareto"   "betbox"   "aidcoin" 
正则表达式提取斜杠和可选的
www.
,以及下一个点之间的第一个字母序列

底端R中的等效物稍微混乱

sub(".+?\\/(?:www\\.)*(\\w+)\\..+", "\\1", list)

这也会添加字符串的开头和结尾,将整个批次替换为您想要的捕获组。它将可选的
www.
设置为非捕获组,因为
sub
stru match
在未找到第一个组时表现不同。

您可以使用
stringr
轻松做到这一点

library(stringr)

str_match(list, "\\/(www\\.)*(\\w+)\\.")[,3]

[1] "gatcoin"  "appcoins" "pareto"   "betbox"   "aidcoin" 
正则表达式提取斜杠和可选的
www.
,以及下一个点之间的第一个字母序列

底端R中的等效物稍微混乱

sub(".+?\\/(?:www\\.)*(\\w+)\\..+", "\\1", list)

这也会添加字符串的开头和结尾,将整个批次替换为您想要的捕获组。它将可选的
www.
设置为非捕获组,因为
sub
stru match
在未找到第一个组时表现不同。

此正则表达式捕获
:/(www.)之后的单词。


此正则表达式捕获
://(www.)
后面的单词

你可以用。然而,这是重新发明轮子。人们以前考虑过如何拆分URL,以便使用现有的函数

例如,解析httr包的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")
现在您有了一个列表列表。解析的列表
的每个元素本身都有多个元素,这些元素包含URL`的部分

提取所有元素
解析[…]]$hostname

hostname <- sapply(parsed, function(e) e$hostname)
hostname您可以使用。然而,这是重新发明轮子。人们以前考虑过如何拆分URL,以便使用现有的函数

例如,解析httr包的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")
现在您有了一个列表列表。解析的列表
的每个元素本身都有多个元素,这些元素包含URL`的部分

提取所有元素
解析[…]]$hostname

hostname <- sapply(parsed, function(e) e$hostname)

hostname@smci你怎么知道OP知道regex…?@akraf:我以为OP给这个regex加了标签,要求别人写一个regex。但不管怎样,尝试使用substr、strsplit或其他任何东西的代码在哪里?因此,需要用户进行尝试,并且通常会显示一些尝试过的代码相关帖子:@smic:这是一种令人鼓舞的方式,可以回应刚刚开始学习编码语言的用户。而且,不是很有帮助;-)。我不知道regrex,如果这能回答你的疑问的话;suffix_extract(domain(url))$domain
其中
url
是链接向量。@smci你怎么知道OP知道regex…?@akraf:我以为OP标记了这个regex,并要求别人写一个regex。但不管怎样,尝试使用substr、strsplit或其他任何东西的代码在哪里?因此,需要用户进行尝试,并且通常会显示一些尝试过的代码相关帖子:@smic:这是一种令人鼓舞的方式,可以回应刚刚开始学习编码语言的用户。而且,不是很有帮助;-)。我不知道regrex,如果这能回答你的疑问的话;后缀提取(域(URL))$domain
其中
URL
是链接的向量。