'Retrieve parts of an expression selected by a path.
Examples
>>> from sympy.simplify.epathtools import EPath
>>> from sympy import sin, cos, E
>>> from sympy.abc import x, y, z, t
>>> path = EPath("/*/[0]/Symbol")
>>> expr = [((x, 1), 2), ((3, y), z)]
>>> path.select(expr)
[x, y]
>>> path = EPath("/*/*/Symbol")
>>> expr = t + sin(x + 1) + cos(x + y + E)
>>> path.select(expr)
[x, x, y]'

def select(self, expr):

    result = []
    def _select(path, expr):
        if (not path):
            result.append(expr)
        else:
            (selector, path) = (path[0], path[1:])
            (attrs, types, span) = selector
            if isinstance(expr, Basic):
                args = self._get_ordered_args(expr)
            elif hasattr(expr, '__iter__'):
                args = expr
            else:
                return
            if (span is not None):
                if (type(span) == slice):
                    args = args[span]
                else:
                    try:
                        args = [args[span]]
                    except IndexError:
                        return
            for arg in args:
                if self._has(arg, attrs, types):
                    _select(path, arg)
    _select(self._epath, expr)
    return result
