当模式不清晰时,在R中提取子字符串

时间:2017-11-01 14:59:06

标签: r rvest

我一周前开始使用R,并且我一直在努力从htmls中提取一些信息以便开始使用。

我知道这是一个经常而且基本的问题,因为我已经在不同的背景下问过这个问题了,我读了很多帖子。

我也知道我可以使用的功能:sub / str_match等。

我选择使用sub(),这是我的代码暂时的样子:

#libraries
library('xml2')
library('rvest')
library('stringr')

#author page:
url <- paste('https://ideas.repec.org/e/',sample[4,3],'.html',sep="")
url <- gsub(" ", "", url, fixed = TRUE)
webpage <- read_html(url)

#get all published articles:
list_articles <- html_text(html_nodes(webpage,'#articles-body ol > li'))

#get titles:
titles <- html_text(html_nodes(webpage, '#articles-body b a'))

#get co-authors:
authors <- sub(".* ([A-Za-z_]+),([0-9]+).\n.*","\\1", list_articles)

以下是list_articles的元素:

" Theo Sparreboom & Lubna Shahnaz, 2007.\n\"Assessing Labour Market 
Vulnerability among Young People,\"\nThe Pakistan Development 
Review,\nPakistan Institute of Development Economics, vol. 46(3), pages 193-
213.\n"  

当我试图得到共同作者时,R给了我整个字符串而不仅仅是共同作者,所以我明确指出了错误的模式,但我不明白为什么。

如果有人可以帮助我,那就太好了。

希望你过得愉快, G. Gauthier

1 个答案:

答案 0 :(得分:1)

这有用吗?

它表示从第一个大写字母中提取字符串,直到有逗号,空格和数字。

library(stringr)

#get co-authors:
authors <- str_extract(list_articles,"[[:upper:]].*(?=, [[:digit:]])")