Ex:

    {()YVPFARKYRPKFFREVIGQEAPVRILKALNcknpskgepcgereiDRGVFPDVRA-LKLLDQASVYGE()}*
    MENINNI{()----------FKLILVGDGKFFSSSGEIIFNIWDTKFGGLRDGYYRLTYKNEDDM()}*

    Or:

    {(HY)ELPWVEKYR...

    The sequence fragments in parentheses represent N- or C-terminal flanking
    regions that are not part of the alignment block (I think). Most tools don't
    include them, but some do, apparently.

def _parse_seq_body(line):
    """
    Ex:

    {()YVPFARKYRPKFFREVIGQEAPVRILKALNcknpskgepcgereiDRGVFPDVRA-LKLLDQASVYGE()}*
    MENINNI{()----------FKLILVGDGKFFSSSGEIIFNIWDTKFGGLRDGYYRLTYKNEDDM()}*

    Or:

    {(HY)ELPWVEKYR...

    The sequence fragments in parentheses represent N- or C-terminal flanking
    regions that are not part of the alignment block (I think). Most tools don't
    include them, but some do, apparently.
    """
    line = line.rstrip('*')
    if '{()' in line:
        head, _rest = line.split('{()', 1)
    else:
        # Match parens
        _rest = line.split('{(', 1)[1]
        head, _rest = _rest.split(')', 1)
    if '()}' in _rest:
        molseq, tail = _rest.split('()}', 1)
    else:
        # Match parens
        molseq, _rest = _rest.split('(', 1)
        tail = _rest.split(')}', 1)[0]
    return (head, molseq, tail)