Simple problem with pattern matching in Mathematica I'm having trouble setting a pattern for simplifying a complex expression.  I've distilled the question down to the simplest case where Mathematica seems to fail.
I set up a simple rule based on a pattern:
simpRule = a b v___ - c d v___ -> e v

which works on the direct case
a b - c d /. simpRule
e

but fails if I simply add a minus sign.
-a b + c d /. simpRule
-a b + c d

How do I go about writing a more robust rule?  Or perhaps there's a better way to go about performing simplifications of this sort?
Thanks,
Keith

Here's the best solution I've come up with so far.  (Yes, I'm answering my own question, but I thought it would be nice to have some resolution to this question.)
simp[expr_] := Module[{fab,fcd,fabmcd,f0},
  {fab,fcd} = {Coefficient[expr, a b], Coefficient[expr, c d]};
  fabmcd = (1/2)(fab - fcd);
  f0 = Simplify[expr - fabmcd (a b - c d)];
  f0 + fabmcd e
]

Here's how it works:
simp[a b - c d] produces e,
simp[-a b + c d] produces -e and
simp[a b - c d + c] produces e + c.
My original intention was to make a more robust pattern rule, however I haven't figured out how to do that.  Instead the solution I'm presenting here is based on using Mathematica's Coefficient[] function.  In my experience, Coefficient[] and CoefficientList[] can be used to do quite sophisticated expression rearrangement.  None the less, someday I'd like figure how to do sophisticated pattern matching.
