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'
复制它