import re


def parse_nav_string(nav):
    """ Parse a nav string and pull out the `name` and `weight` of each nav item.

    >>> parse_nav_string('Foo>Bar>Baz')
    [('Foo', 0), ('Bar', 0), ('Baz', 0)]

    >>> parse_nav_string('Foo __99__>Bar>Baz')
    [('Foo', 99.0), ('Bar', 0), ('Baz', 0)]

    >>> parse_nav_string('Foo __-1__>Bar>Baz')
    [('Foo', -1.0), ('Bar', 0), ('Baz', 0)]

    >>> parse_nav_string(None)
    []
    """
    NAV_PARSER = r'\w+\s*__(-?\d+)__'
    if not nav:
        return []

    def _weight(chunk):
        matches = re.search(NAV_PARSER, chunk)
        return float(matches.group(1)) if matches else 0

    def _name(chunk):
        return chunk.split('__')[0].strip()

    chunks = [(_name(chunk), _weight(chunk)) for chunk in nav.split('>')]
    return chunks