I agree with you.  I haven't thought about `xor` - tried single condition using `not self.reverse and not self.regex.search` and found that in `reverse` mode the `search` would be called twice.  I think your solution is better (as long as we have documentation, readability would be fine).