```
>>> a=Wild('a', exclude=[x])
>>> b=Wild('b', exclude=[x])
>>> (2*x + y).replace(a*x + b, a - b)
y - 2
>>> (2*x + y).replace(a*x + b, b - a)
y - 2
```

I've modified replace so that the match only succeeds if complete. I think this makes a lot more sense. See what you think.