在R中使用str_detect()检测精确匹配

在R中使用str_detect()检测精确匹配,r,stringr,R,Stringr,我在R中有一个字符串: c("FLT1", "FLT1P1", "FLT1-FLT2", "SGY-FLT1, GPD") 我想保留所有具有FLT1的匹配项,但在添加其他字母数字字符时不保留。换句话说,我想保留除第二个之外的所有条目,因为它们都提到FLT1,但第二个提到FLT1P1 当我使用str_detect时,它会将所有内容返回为true: str_detect(string, "FLT1") [1] TRUE TRUE TRUE TRUE 有人能建议最好的方法只退回提到FLT1的物品吗

我在R中有一个字符串:

c("FLT1", "FLT1P1", "FLT1-FLT2", "SGY-FLT1, GPD")
我想保留所有具有FLT1的匹配项,但在添加其他字母数字字符时不保留。换句话说,我想保留除第二个之外的所有条目,因为它们都提到FLT1,但第二个提到FLT1P1

当我使用str_detect时,它会将所有内容返回为true:

str_detect(string, "FLT1")
[1] TRUE TRUE TRUE TRUE
有人能建议最好的方法只退回提到FLT1的物品吗?

使用环顾四周的方法

库(stringr)
x%
str_detect((?使用环顾四周

库(stringr)
x%
str_detect((?“未添加其他字符”对我来说是指由
\\b
表示的单词边界

x <- c("FLT1", "FLT1P1", "FLT1-FLT2", "SGY-FLT1, GPD")
stringr::str_detect(x, "FLT1\\b")
# [1]  TRUE FALSE  TRUE  TRUE
“未添加其他字符”对我来说是指由
\\b
表示的单词边界

x <- c("FLT1", "FLT1P1", "FLT1-FLT2", "SGY-FLT1, GPD")
stringr::str_detect(x, "FLT1\\b")
# [1]  TRUE FALSE  TRUE  TRUE
带有
\\b
的单词边界可能会起作用。它们匹配字符串的开头或结尾以及与非数字、字母或下划线的任何字符之间的转换

str_detect(string, "\\bFLT1\\b")
[1]  TRUE FALSE  TRUE  TRUE
带有
\\b
的单词边界可能会起作用。它们匹配字符串的开头或结尾以及与非数字、字母或下划线的任何字符之间的转换

str_detect(string, "\\bFLT1\\b")
[1]  TRUE FALSE  TRUE  TRUE

如其他人所述,最好的方法是使用
\\b
。 或者,您可以使用正向前瞻:

grep("FLT1(?!\\w)", x, perl = T, value = T)
[1] "FLT1"          "FLT1-FLT2"     "SGY-FLT1, GPD"
数据:

这里,
grep
匹配
FLT1
如果,并且仅当紧接着的下一个字符是字符串的结尾(
$
)或
-
。暗示一下,当紧接着的下一个字符是字母数字时,它不匹配

或者,如果规则是要排除添加字母数字字符的值,则可以使用负数前瞻:

grep("FLT1(?!\\w)", x, perl = T, value = T)
[1] "FLT1"          "FLT1-FLT2"     "SGY-FLT1, GPD"

如其他人所述,最好的方法是使用
\\b
。 或者,您可以使用正向前瞻:

grep("FLT1(?!\\w)", x, perl = T, value = T)
[1] "FLT1"          "FLT1-FLT2"     "SGY-FLT1, GPD"
数据:

这里,
grep
匹配
FLT1
如果,并且仅当紧接着的下一个字符是字符串的结尾(
$
)或
-
。暗示一下,当紧接着的下一个字符是字母数字时,它不匹配

或者,如果规则是要排除添加字母数字字符的值,则可以使用负数前瞻:

grep("FLT1(?!\\w)", x, perl = T, value = T)
[1] "FLT1"          "FLT1-FLT2"     "SGY-FLT1, GPD"

你可以锚定你的正则表达式不使用正则表达式进行完全字符串精确匹配。
string==“FLT1”
如果我使用string==“FLT1”,它会漏掉诸如“FLT1-FLT2”之类的条目好吧,所以当你说“但不是在添加其他字符时”,你似乎没有在字符定义中包含
“-”
。你的意思是“但不是在添加其他字母时”是否添加了?“…不是其他字母和数字”?“除了“-”以外的任何内容?其他内容?您可以尝试
str_detect(string,“FLT1(\\W |$)”)
,在FLT1之后不指定字母数字字符(即不是字母数字或字符串结尾的字符)您可以锚定regex。不要使用regex进行完全字符串匹配。
string==“FLT1“
如果我使用string==”FLT1“,它会漏掉诸如”FLT1-FLT2“之类的条目,好吧,所以当你说“但不是在添加其他字符时”,你似乎没有在字符定义中包含“
”-”
。你的意思是“但不是在添加其他字母时?”…不是其他字母和数字”?“除了”-“?其他内容?您可以尝试
str_detect(字符串,“FLT1(\\W |$)”)
,在FLT1之后不指定字母数字字符(即不是字母数字或字符串结尾的字符)