使用stringr修正正则表达式[下一行查询]

时间:2018-07-12 17:47:51

标签: r regex stringr

我为此做了很多尝试,现在必须转向您。我在这里看到了相关的帖子,但没有帮助。我为为什么无法获得一份清单而感到烦恼,清单似乎出现在Instruments:一词之后!

library(RCurl);library(XML);library(rvest);library(dplyr);library(stringr)

A<-"https://www.google.com/search?q=lester+young&oq=lester+young&aqs=chrome..69i57j69i60l2j0l3.1767j1j4&sourceid=chrome&ie=UTF-8"

result<-A %>%
    read_html()%>%
    html_nodes(xpath="//span")%>%html_text()

# Parse `result` with regex
instruments<-str_extract(result,"(.*Instruments:\n.*)")
instruments
dob<-str_extract(result,".*(Born: \n.*)")
dob

“结果”如下所示:

[38]“莱斯特·威利斯·扬(Lester Willis Young),绰号“普雷斯”或“普雷斯”,是美国爵士男高音萨克斯管演奏家和不定期的单簧管演奏家。他乐器上最有影响力的演奏家。维基百科” [39]“出生:”
[40]“ 1909年8月27日,密西西比州伍德维尔”
[41]“死于:”
[42]“ 1959年3月15日,纽约州纽约市”
[43]“昵称:”
[44]“ Prez”
[45]“乐器:”
[46]“单簧管萨克斯风,单簧管”

虽然可以在该网页上使用instruments<-result[46],但是HTML抓取会在不同的行上针对不同的搜索产生工具和dob信息。

最终,我想在instruments对象中看到“钢琴”,并在dob对象中看到出生日期。

谢谢...

1 个答案:

答案 0 :(得分:1)

这对我有用。获取“仪器:”的索引,然后打印下一个条目。当然,如果页面格式更改,则可能不起作用。

> i <- as.integer(grep("Instruments:",result))
> print(result[i+1])
[1] "Tenor saxophone, clarinet"

或者这个:

> result_all <- paste(result,collapse="\n")
> str_extract(result_all,"(Instruments:.*\\n.*)")
[1] "Instruments: \nTenor saxophone, clarinet"