It's not really wrong it just feels uncomfortable. This whole function. 

It's really not clear what the purpose is. And I don't think adding a doc string would solve that. 
Some thoughts...

* It's called `get_operator_from_string()`, so I'd expect something like `assert get_operator_from_string('~foo') == '~'`. Should it be called `split_on_operator()`?
* I don't understand what the difference is between a prefix and an operator. Technically, the prefix IS the operator. E.g. in `~foo` the **prefix** is `~`. It is also the operator and `foo` is the value. 
* If the point of this "prefix" is to negate (ie. same operation but NOT), I don't think it belongs here. 

I'm sorry if it's more work but the code is still young and fresh so we can work on making it awesome. 
For one thing, it irks me that some operators work with negating and some don't. Right? For example `<` could be negated with either `!<` or `>=` but I don't think `!<` makes any sense.