R 从字符向量中提取字符串时遇到问题

R 从字符向量中提取字符串时遇到问题,r,stringr,R,Stringr,我无法从使用stringr库命名的类的字符向量中提取某些匹配项: classes = read_lines("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>% str_flatten() 一小段类: ...collaborative data analysis; complete case study review and team data analysis project. Effective

我无法从使用
stringr
库命名的类的字符向量中提取某些匹配项:

classes = read_lines("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>%
  str_flatten()
一小段

...collaborative data analysis; complete case study review and team data analysis project. 
Effective: 2019 Fall Quarter.</p><h2>STA 190X—Seminar (1-2)</h2><p>Seminar—1-2 hour(s). Prerequisite(s):
STA 013 or STA 013Y or STA 032 or STA 100 or STA 103. In-depth examination of a special topic in a small 
group setting. Effective: 2018 Spring Quarter.</p><h2>STA 192—Internship in Statistics (1-12)</h2>
<p>Internship—3-36 hour(s); Term Paper...
但是,如果我将一个节直接复制并粘贴到函数中,它会起作用:

> str_detect("</p><h2>STA 190X—Seminar (1-2)</h2>", "STA 190X")
[1] TRUE

> str_extract_all("</p><h2>STA 190X—Seminar (1-2)</h2>", "STA 190X")
[[1]]
[1] "STA 190X"
str_detect(“STA 190X研讨会(1-2)”,“STA 190X”) [1] 真的 >str_extract_all(“STA 190X研讨会(1-2)”,“STA 190X”) [[1]] [1] “STA 190X”
有人知道这是为什么吗?

我们可以使用
rvest
进行处理并提取正确的“节点”

library(rvest)
library(stringr)
library(magrittr)
read_html("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>%
       html_nodes("h2") %>%
       html_text() %>% 
       str_c(collapse = ' ') %>% 
       str_extract(., "STA 190X")
#[1] "STA 190X"

我们可以使用
rvest
进行处理,并提取正确的“节点”

library(rvest)
library(stringr)
library(magrittr)
read_html("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>%
       html_nodes("h2") %>%
       html_text() %>% 
       str_c(collapse = ' ') %>% 
       str_extract(., "STA 190X")
#[1] "STA 190X"
一个简单的解决方案: 您只需稍微调整您的正则表达式,使其不仅匹配空格,而且匹配任何非字母或数字的内容:

str_detect(classes, "STA[^A-z0-9]190X")  
[1] TRUE
解释: 这是最奇怪的事情:

match_position <- gregexpr("STA[^ ]*190X", classes)[[1]][1]
substr(classes, match_position - 10, match_position + 17)
返回no匹配,我认为这意味着神秘人物是:

[:点:]

标点符号: ! “#$%&'()*+,-./:;<=>?@[\]^ `{124;}~

一个简单的解决方案: 您只需稍微调整您的正则表达式,使其不仅匹配空格,而且匹配任何非字母或数字的内容:

str_detect(classes, "STA[^A-z0-9]190X")  
[1] TRUE
解释: 这是最奇怪的事情:

match_position <- gregexpr("STA[^ ]*190X", classes)[[1]][1]
substr(classes, match_position - 10, match_position + 17)
返回no匹配,我认为这意味着神秘人物是:

[:点:]

标点符号: ! " # $ % & ' ( ) * + , - . / : ; < = > ? @ [\]^{{124;}~


空白似乎是个问题。尝试使用
\\s
作为空白,它应该可以工作

readr::read_lines("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>%
    stringr::str_flatten() %>%
    stringr::str_extract("STA\\s190X")

#[1] "STA 190X"

空白似乎是个问题。尝试使用
\\s
作为空白,它应该可以工作

readr::read_lines("https://statistics.ucdavis.edu/courses/descriptions-undergrad") %>%
    stringr::str_flatten() %>%
    stringr::str_extract("STA\\s190X")

#[1] "STA 190X"

您在屏幕上看到的内容与您的计算机通过
阅读行
下载页面时看到的内容不同(请尝试在浏览器中查看源代码或Ctrl+U)。在页面上单击鼠标右键,然后单击“检查”。建议使用
rvest
package之类的软件包重试。哪个软件包是
read_line from
<代码>字符串不知道它。
str(classes)
的输出是什么?@dario str(classes)的输出是
chr”@John你能检查我显示的输出吗?你在屏幕上看到的与你的计算机通过
读线下载页面时看到的不同(尝试在浏览器中查看源代码或Ctrl+U)。右键单击页面并单击“检查”。建议使用类似于
rvest
package的东西重试。哪个包是
read\u line from
stringr
不知道它。str(classes)
的输出是什么?@dario str(classes)的输出是
chr”@John你能检查我显示的输出吗我复制了你的代码,但我的输出是“NA”,不是“STA 190X”@John抱歉,我不能用
packageVersion('rvest')[1]“0.3.4'>packageVersion('stringr')[1]“1.4.0”
R3.6.2
上复制你的代码,但我的输出是“NA”,不是“STA 190X”@John抱歉,我无法在
R3.6.2上使用
packageVersion('rvest')[1]'0.3.4'>packageVersion('stringr')[1]'1.4.0'
复制它