str_detect找到一个以字符开头并以字符结尾的单词

时间:2018-06-17 01:17:10

标签: r regex 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"

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

我想检测以p开头并以r结尾的单词。我期待结果正常和差劲。我正在努力解决这个问题需要几个小时来完成作业。

words[str_detect(words, "[^p][r$]")]

无论位置如何,这都会出现p和r中的任何内容。

words[str_detect(words, "^pr$")]

这件事直接起作用并不起作用。它没有匹配任何东西,但没有抛出错误。我不明白为什么它不会抛出错误。我首先认为它匹配单词^ pr $但不需要转义&#34; \&#34;?

4 个答案:

答案 0 :(得分:2)

你几乎就在那里

words[str_detect(words, "^p\\w*r$")]
#[1] "proper" "poor"

我们将"p""r"之间的字符与"\\w*"进行对帐,这些字符会转换为>=0次出现的任何字词。

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

words[str_detect(words, "^p[A-Za-z]*r$")]

答案 1 :(得分:1)

可能最简单的选择是使用character class范围:[a-z]

library(stringr)
words <- c("proposition", "proper", "poor", "paul", "park", "car")
words[str_detect(words, "^p[a-z]+r$")]

如果您还想包含大写字母,我建议您启用不区分大小写的inline mode

words <- c("proposition", "proper", "Poor", "paul", "park", "car")
words[str_detect(words, "(?i)^p[a-zA-Z]+r$")]
#[1] "proper" "Poor"

答案 2 :(得分:1)

除了str_detect之外,您还可以使用更简洁的str_subset

str_subset(words, "^p[A-Za-z]*r$")
# [1] "proper" "poor"

答案 3 :(得分:0)

对于此示例,您只需使用.*指定任何字符。

words <- c("proposition", "proper", "poor", "paul", "park", "car")
str_subset(words,'^p.*r$')