Регулярное выражение для соответствия строке, заканчивающейся буквой, но НЕ заканчивающейся фразой в R

Мне нужно использовать grep найти все строки, заканчивающиеся на G но НЕ заканчивается STIG или же VÄG в следующем символьном векторе:

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

Я пробовал это, но он возвращает false для любой строки с буквами S, T, I, V, Ä предшествующий G вместо возврата ложного, когда G предшествует точная фраза.

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

# [1] "EWASPG"  "QWSFNJG"

Спасибо!

Я в курсе этого поста.

1 ответ

Класс символов всегда соответствует одному символу, поэтому [^(STI)] будет соответствовать любому символу, кроме (, S, T, I или же ),

Вы можете использовать отрицательное утверждение, чтобы убедиться, что строка не заканчивается определенной подстрокой, но вам нужно включить Perl-совместимый режим регулярных выражений в R:

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

Проверьте это в прямом эфире на regex101.com.

Другие вопросы по тегам