过滤并删除以 R 中某个单词开头和结尾的句子

Filter and remove sentences that begin and end with a certain word in R

我正在尝试过滤以某个词开头和结尾的词。 我有一些文本数据,例如:

data <- c("No comment", "Nothing", "No clue", "No", "No", "I have no clue", "Noe")

现在我想检测以 no 开头和结尾的句子。我试过了

str_detect(data, "^No", negate = FALSE)

但显然第 1、3 句和令人惊讶的第 7 句也被检测到。

我不知道如何告诉 R 只检测句子当且仅当它以单词“No”开头和结尾时才检测。

有人有想法吗? 我是新来的,所以我希望我的问题描述令人满意。

期待大家的来信!

data <- c("No comment", "Nothing", "No clue", "No", "No", "I have no clue", "Noe")
data <- c(data, "No and No", "No and YesNo")
grepl("^No(.*\bNo)?$", data)
# [1] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE  TRUE FALSE

如果 "YesNo" 确实匹配,则从正则表达式中删除 \b

正则表达式:

  • ^No - 以文字 No;
  • 开头
  • (...)?$ - optional匹配字符串末尾;这意味着 "No""No something No" 都匹配;
  • .*\bNo - 任何后跟单词边界和文字 No

编辑。将第一个元素更改为以 n 开头并以 no 结尾:

new_data <- c("No comment no", "Nothing", "No clue", "No", "No", "I have no clue", "Noe")

library(stringr)
str_detect(new_data, "^No.*no$")
[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

这是您要找的吗?

lst <- unlist(data)
startsWith(lst, "No") & endsWith(lst, "No")
[1] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE

lst[startsWith(lst, "No") & endsWith(lst, "No")] 
[1] "No" "No"

如果您正在寻找与“否”完全匹配的正则表达式,您可以选择:

library(stringr)
data <- c("No comment", "Nothing", "No clue", "No", "No", "I have no clue", "Noe")
str_detect("^No$", data)

# > [1] FALSE FALSE FALSE  TRUE  TRUE FALSE FALSE