def METHOD_NAME(self, text):
    """Auxiliary method for Punctuation.preserve()"""
    matches = list(re.finditer(self.puncs_regular_exp, text))
    if not matches:
        return [text], []
    # the text is only punctuations
    if len(matches) == 1 and matches[0].group() == text:
        return [], [_PUNC_IDX(text, PuncPosition.ALONE)]
    # build a punctuation map to be used later to restore punctuations
    puncs = []
    for match in matches:
        position = PuncPosition.MIDDLE
        if match == matches[0] and text.startswith(match.group()):
            position = PuncPosition.BEGIN
        elif match == matches[-1] and text.endswith(match.group()):
            position = PuncPosition.END
        puncs.append(_PUNC_IDX(match.group(), position))
    # convert str text to a List[str], each item is separated by a punctuation
    splitted_text = []
    for idx, punc in enumerate(puncs):
        split = text.split(punc.punc)
        prefix, suffix = split[0], punc.punc.join(split[1:])
        splitted_text.append(prefix)
        # if the text does not end with a punctuation, add it to the last item
        if idx == len(puncs) - 1 and len(suffix) > 0:
            splitted_text.append(suffix)
        text = suffix
    return splitted_text, puncs