我检查了不同的帖子,但仍然无法弄清楚为什么这不起作用:
c=c("HI","NO","YESS") grep("YES",c,fixed=T) [1] 3
如果我使用fixed = T,为什么我仍然得到一个结果时,没有完全匹配的“是”。我只希望完全匹配,就像我在bash中使用grep -w。
fixed = T
grep -w
bgtovc5b1#
这仅仅意味着您匹配的是一个字符串而不是一个正则表达式,但是字符串仍然可以是一个子字符串。
> x=c("HI","NO","YESS") #better not to name variables after common functions > grep("^YES$",x,fixed=F) integer(0)
编辑per @nicola:这是可行的,因为^表示字符串的开头,$表示字符串的结尾,所以^xxxx$强制整个字符串匹配xxxx。
^
$
^xxxx$
xxxx
x0fgdtte2#
最好的解决方案似乎是使用\b作为单词边界,就像grep("\\bYES\\b",x)。在其他情况下,你有限制,例如,如果你有c=c("HI","NO","YES S")或c=c("HI","NO","YES,S"),^YES$或which(c=="YES")将无法帮助你在这些字符串中找到“YES”。在此找到解决方案:https://stackoverflow.com/a/26813671/14590183
\b
grep("\\bYES\\b",x)
c=c("HI","NO","YES S")
c=c("HI","NO","YES,S")
^YES$
which(c=="YES")
2条答案
按热度按时间bgtovc5b1#
这仅仅意味着您匹配的是一个字符串而不是一个正则表达式,但是字符串仍然可以是一个子字符串。
编辑per @nicola:这是可行的,因为
^
表示字符串的开头,$
表示字符串的结尾,所以^xxxx$
强制整个字符串匹配xxxx
。x0fgdtte2#
最好的解决方案似乎是使用
\b
作为单词边界,就像grep("\\bYES\\b",x)
。在其他情况下,你有限制,例如,如果你有c=c("HI","NO","YES S")
或c=c("HI","NO","YES,S")
,^YES$
或which(c=="YES")
将无法帮助你在这些字符串中找到“YES”。在此找到解决方案:https://stackoverflow.com/a/26813671/14590183