import re


def split_program_by_processing_element_label(program_string):
    """
    Split a program string into a list of individual processing element programs based on the location of <*> labels.

    :param program_string: multiline string containing an assembly program with <*> labels
    :return: the corresponding list of label-string tuples
    """

    # Find the labels.
    labels = re.findall(r"<(.*?)>", program_string)

    # Replace all instances of processing element delimiter with just the bookends "<>" as a sigil.
    program_string = re.sub(r"<.*>", "<>", program_string)

    # Split the program string into a list of processing element programs and delete the leading null field.
    processing_element_program_strings = program_string.split("<>")
    del processing_element_program_strings[0]

    # Return the resulting list.
    return list(zip(labels, processing_element_program_strings))