如何根据一些标准在R中使用正则表达式提取URL?
我需要从我使用如何根据一些标准在R中使用正则表达式提取URL?,r,regex,rvest,R,Regex,Rvest,我需要从我使用rvest 但是,我只需要提取以下URL之一开头的URL /assets/ /data /files/ 并包含以下单词之一(不区分大小写) primary elem midd high 但是,当URL以/files/开头时,就不需要了,因为该URL必须只包含供研究人员使用的数据 我用的是R;因此,我使用rvest提取数据: 代码 url %>% html_nodes("a") %>% html_attr("href") %>%
rvest
但是,我只需要提取以下URL之一开头的URL
/assets/
/data
/files/
primary
elem
midd
high
/files/
开头时,就不需要了,因为该URL必须只包含供研究人员使用的数据
我用的是R;因此,我使用rvest
提取数据:
代码
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*(assets|data|files).*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
这在很大程度上是有效的——也就是说,它提取了我需要的几乎所有URL,但它从以\files\
开头的URL中提供了一些额外的URL
示例-正则表达式工作的地方
[1] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Primary_School_Performance_File_2008.xls"
[2] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Primary_School_Fact_File_2008.xls"
[3] "https://www.ed.sc.gov/assets/reportCards/2008/documents/2008-ELEM-Schools-Performance-Data.xls"
[4] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Elementary_School_Fact_File_2008.xls"
[5] "https://www.ed.sc.gov/assets/reportCards/2008/documents/2008-MIDDLE-Schools-Performance-Data.xls"
[6] "https://www.ed.sc.gov/assets/reportCards/2008/documents/Middle_School_Fact_File_2008.xls"
代码不起作用的地方
/files/2018/data-files/high-school-ela-math-results/
/files/2018/data-files/elementary-middle-ela-math-results/
/files/2018/data-files/2018-report-card-data-for-researchers/
/files/2018/data-files/2018-report-card-data-for-researchers-additional-information/
但是我只想要这个列表中的第三个,同时保留我使用上面代码匹配的所有其他的
我尝试了很多regex模式的变体,但它大多只删除了上面的底部2
我怎样才能解决这个问题
数据
我正在将链接添加到文件中,我将所有数据的dput
,因为列表太长,无法发布。它可以下载我不知道你是否可以在正则表达式中使用条件语句。因此,我建议分两步完成这一步骤,并将列表合并
most_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*(assets|data).*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
remaining_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*files.*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
all_data <- c(most_data, remaining_data)
most_数据%
html_节点(“a”)%%>%html_属性(“href”)%%>%
str|u子集(regex(“^/*(资产数据)。*((主要元素中高)(研究人员数据))”,忽略案例=T)
剩余数据%
html_节点(“a”)%%>%html_属性(“href”)%%>%
str|u子集(regex(“^/*文件”。((主要|元素|中间|高)|(研究人员数据))”,忽略| case=T))
所有的数据我不知道你是否能在正则表达式中做条件运算。因此,我建议分两步完成这一步骤,并将列表合并
most_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*(assets|data).*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
remaining_data <-
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex("^//*files.*((Primary|Elem|Midd|High)|(data-for-researchers))", ignore_case = T))
all_data <- c(most_data, remaining_data)
most_数据%
html_节点(“a”)%%>%html_属性(“href”)%%>%
str|u子集(regex(“^/*(资产数据)。*((主要元素中高)(研究人员数据))”,忽略案例=T)
剩余数据%
html_节点(“a”)%%>%html_属性(“href”)%%>%
str|u子集(regex(“^/*文件”。((主要|元素|中间|高)|(研究人员数据))”,忽略| case=T))
所有数据都可以使用:
library(rvest)
library(stringr)
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)', ignore_case = TRUE))
或者在base R中使用grep
:
grep('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)',
x, value = TRUE, ignore.case = TRUE)
其中x
是字符串 您可以使用:
library(rvest)
library(stringr)
url %>%
html_nodes("a") %>% html_attr("href") %>%
str_subset(regex('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)', ignore_case = TRUE))
或者在base R中使用grep
:
grep('(assets/|data/).*((Primary|Elem|Midd|High))|(files.*data-for-researchers/)',
x, value = TRUE, ignore.case = TRUE)
其中x
是字符串 太棒了!我知道我在哪里犯了错误。谢谢太棒了!我知道我在哪里犯了错误。谢谢