I likeHere are two approaches using DeleteCases for tasks like this because the head of the expression is maintained. SoFreeQ:
DeleteCases[expr, s_ /; FreeQ[s, Alternatives @@ keep]]
(n1 q)/(2 n3 (r + s)^4) - s^4/(2 n2 n4 r (r - s) (r + s)^3) - (n1 q)/( 2 n2 (-r + s) (r + s)^3) - (n2 q)/(2 n1 (-r + s) (r + s)^3) - (n2 q)/( n3 (-r + s) (r + s)^3) + (n2^2 q)/(2 n1 n3 (-r + s) (r + s)^3) - (n1^2 q^2)/( 8 n2n3 r (-r + s) (r + s)^3) + (3 n1 q^2)/(8 n3 r (-r + s) (r + s)^3) - ( 3 n2 q^2)/(8 n3 r (-r + s) (r + s)^3) + (n2^2 q^2)/( 8 n1 n3 r (-r + s) (r + s)^3)
Select[expr, Not @* FreeQ[Alternatives @@ keep]]
(n1 q)/(2 n3 (r + s)^4) - s^4/(2 n2 n4 r (r - s) (r + s)^3) - (n1 q)/( 2 n2 (-r + s) (r + s)^3) - (n2 q)/(2 n1 (-r + s) (r + s)^3) - (n2 q)/( n3 (-r + s) (r + s)^3) + (n2^2 q)/(2 n1 n3 (-r + s) (r + s)^3) - (n1^2 q^2)/( 8 n2n3 r (-r + s) (r + s)^3) + (3 n1 q^2)/(8 n3 r (-r + s) (r + s)^3) - ( 3 n2 q^2)/(8 n3 r (-r + s) (r + s)^3) + (n2^2 q^2)/( 8 n1 n3 r (-r + s) (r + s)^3)