我需要使用 grep
查找以 G
结尾但不以 STIG
或 VäG
结尾的所有字符串在以下字符向量中:
test=c("EWASPG","AVOPW","SDAGSTIG","ASDVVÄG","ASDVWE","QSCIUVG","QWSFNJG")
我尝试了这个,但对于任何带有字母 S
、T
、I
、V
的字符串,它都会返回 false >, Ä
在 G
之前,而不是当 G
前面有确切的短语时返回 false。
grep("[^((STI)|(VÄ))]G$", test, value=T)
# [1] "EWASPG" "QWSFNJG"
谢谢!
我知道this post .
最佳答案
一个character class始终匹配单个字符,因此 [^(STI)]
将匹配除 (
, S
, T
之外的任何字符>、I
或 )
。
您可以使用 negative lookbehind assertion确保字符串不以某个子字符串结尾,但您需要在 R 中启用 Perl 兼容的正则表达式模式:
grep("(?<!STI|VÄ)G$", test, perl=TRUE, value=TRUE);
测试一下 live on regex101.com .
关于regex - 正则表达式匹配以字母结尾但不以 R 中的短语结尾的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24036373/