Select[ sentences, And[StringContainsQ[WordBoundary ~~ "cat" ~~ WordBoundary][#], StringFreeQ[WordBoundary ~~ "rat" ~~ WordBoundary][#]] &]