str_detect 查找以字符开头并以字符结尾的单词

Col*_*Pan 1 regex r stringr

library(stringr)

words <- c("proposition", "proper", "poor", "paul", "park", "car")
words[str_detect(words, "^p")]
[1] "proposition" "proper" "poor" "paul" "park"
words[str_detect(words, "r$")]
[1] "proper" "poor" "car"
Run Code Online (Sandbox Code Playgroud)

我已经大大缩减了作业的数据。

我想检测以 p 开头并以 r 结尾的单词。我期待结果是正确的和糟糕的。我现在正在为一项作业花费几个小时来解决这个问题。

words[str_detect(words, "[^p][r$]")]
Run Code Online (Sandbox Code Playgroud)

无论位置如何,都会得出单词中带有 p 和 r 的任何内容。

words[str_detect(words, "^pr$")]
Run Code Online (Sandbox Code Playgroud)

这东西直接说是不行的。它不匹配任何内容,但没有抛出错误。我不明白为什么它不会抛出错误。我首先认为它与单词 ^pr$ 匹配,但这不需要转义“\”吗?

Mau*_*ers 6

你就快到了

words[str_detect(words, "^p\\w*r$")]
#[1] "proper" "poor"
Run Code Online (Sandbox Code Playgroud)

"p"我们考虑了和之间的字符,"r""\\w*"其翻译为任何单词字符出现的>=0时间。

正如 @wp78de 指出的, 匹配的单词字符"\w"包括数字和下划线(将其视为 的简写"[A-Za-z0-9_]"),因此如果您只想匹配字符(大写和小写),您可以这样做

words[str_detect(words, "^p[A-Za-z]*r$")]
Run Code Online (Sandbox Code Playgroud)