2

我需要使用grep来查找所有以以下字符向量结尾G但不以STIG或结尾的字符串:VÄG

test=c("EWASPG","AVOPW","SDAGSTIG","ASDVVÄG","ASDVWE","QSCIUVG","QWSFNJG")

我试过这个,但它返回 false 任何带有字母S, T, I, V,Ä在前面的字符串,而不是在前面是确切的短语G时返回 false 。G

grep("[^((STI)|(VÄ))]G$", test, value=T)

# [1] "EWASPG"  "QWSFNJG"

谢谢!

我知道这篇文章

4

1 回答 1

4

字符类始终匹配单个字符,因此[^(STI)]将匹配除(S、或T之外的任何字符。I)

您可以使用否定的lookbehind断言来确保字符串不以某个子字符串结尾,但您需要在R中启用与Perl兼容的正则表达式模式:

grep("(?<!STI|VÄ)G$", test, perl=TRUE, value=TRUE);

在 regex101.com 上进行实时测试。

于 2014-06-04T11:41:42.017 回答