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;?
答案 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$')