Some speedups

Nothing spectacular
N.B. why there was a regexp in __getitem__() ?
find('.') seems faster than split('.') + len()

UPDATE:
*Restored* the REGEXP since __getitem__() can be called with an Expression object *or* the result of str(<Expression>) so isinstance cannot be used to reason on that