在R中的字符串的中间或末尾提取数字

POT*_*NZA 2 r

我有一个字符串向量.我想在"#stalls"之后提取一个数字:这些数字位于字符串的中间或末尾.

x <- c("1345 W. Pacific Coast Highway<br/>Wilmington 90710<br/><br/>County: Los Angeles<br/>Date Updated: 6/25/2013<br/>Latitude:-118.28079400<br/>Longitude:33.79077900<br/># of Stalls: 244<br/>Cost: Free", "20601 La Puente Ave<br/>Walnut 91789<br/>County: Los Angeles<br/>Date Updated: 6/18/2007<br/>Latitude: -117.859972<br/>Longitude: 34.017513<br/>Owner: Church<br/>Operator: Caltrans<br/># of Stalls: 40")
Run Code Online (Sandbox Code Playgroud)

这是我的试用版,但还不够.我感谢您的帮助.

gsub(".*\\# of Stalls: ", "", x) 
Run Code Online (Sandbox Code Playgroud)

ali*_*ire 7

由于它是HTML,您可以使用rvest或其他HTML解析器来首先提取您想要的节点,这使得提取数字变得微不足道.对于这类工作,XPath选择器和函数比CSS更灵活.

library(rvest)

x %>% paste(collapse = '<br/>') %>% 
    read_html() %>% 
    html_nodes(xpath = '//text()[contains(., "# of Stalls:")]') %>% 
    html_text() %>% 
    readr::parse_number()
#> [1] 244  40
Run Code Online (Sandbox Code Playgroud)


akr*_*run 5

我们匹配一个或多个不是a #([^#]+)的字符,从^字符串的start()后跟一个#后跟零个或多个不是数字的字符([^0-9]*)后跟一个或多个数字([0-9]+)作为一个组((...))捕获,然后是其他字符(.*),并将其替换\\1为捕获组的backreference()

as.integer(sub("^[^#]+#[^0-9]*([0-9]+).*", "\\1", x))
#[1] 244  40
Run Code Online (Sandbox Code Playgroud)

如果字符串更具体,那么我们可以指定它

as.integer(sub("^[^#]+# of Stalls:\\s+([0-9]+).*", "\\1", x))
#[1] 244  40
Run Code Online (Sandbox Code Playgroud)