def parse_hotkey(text):
    """
    Extract a desired hotkey from the text.  The format to enclose
    the hotkey in square braces
    as in Button_[1] which would assign the keyboard key 1 to that button.
      The one will be included in the
    button text.  To hide they key, use double square braces as in:  Ex[[qq]]
    it  , which would assign
    the q key to the Exit button. Special keys such as <Enter> may also be
    used:  Move [<left>]  for a full
    list of special keys, see this reference: http://infohost.nmt.edu/tcc/help/
    pubs/tkinter/web/key-names.html
    :param text:
    :return: list containing cleaned text, hotkey, and hotkey position within
    cleaned text.
    """

    ret_val = [text, None, None]  # Default return values
    if text is None:
        return ret_val

    # Single character, remain visible
    res = re.search('(?<=\[).(?=\])', text)
    if res:
        start = res.start(0)
        end = res.end(0)
        caption = text[:start - 1] + text[start:end] + text[end + 1:]
        ret_val = [caption, text[start:end], start - 1]

    # Single character, hide it
    res = re.search('(?<=\[\[).(?=\]\])', text)
    if res:
        start = res.start(0)
        end = res.end(0)
        caption = text[:start - 2] + text[end + 2:]
        ret_val = [caption, text[start:end], None]

    # a Keysym.  Always hide it
    res = re.search('(?<=\[\<).+(?=\>\])', text)
    if res:
        start = res.start(0)
        end = res.end(0)
        caption = text[:start - 2] + text[end + 2:]
        ret_val = [caption, '<{}>'.format(text[start:end]), None]

    return ret_val
def parse_hotkey ( text ) : ret_val = [ text , None , None ] if text is None : return ret_val res = re . search ( '(?<=\[).(?=\])' , text ) if res : start = res . start ( 0 ) end = res . end ( 0 ) caption = text [ : start - 1 ] + text [ start : end ] + text [ end + 1 : ] ret_val = [ caption , text [ start : end ] , start - 1 ] res = re . search ( '(?<=\[\[).(?=\]\])' , text ) if res : start = res . start ( 0 ) end = res . end ( 0 ) caption = text [ : start - 2 ] + text [ end + 2 : ] ret_val = [ caption , text [ start : end ] , None ] res = re . search ( '(?<=\[\<).+(?=\>\])' , text ) if res : start = res . start ( 0 ) end = res . end ( 0 ) caption = text [ : start - 2 ] + text [ end + 2 : ] ret_val = [ caption , '<{}>' . format ( text [ start : end ] ) , None ] return ret_val
Extract a desired hotkey from the text.  The format to enclose
    the hotkey in square braces
    as in Button_[1] which would assign the keyboard key 1 to that button.
      The one will be included in the
    button text.  To hide they key, use double square braces as in:  Ex[[qq]]
    it  , which would assign
    the q key to the Exit button. Special keys such as <Enter> may also be
    used:  Move [<left>]  for a full
    list of special keys, see this reference: http://infohost.nmt.edu/tcc/help/
    pubs/tkinter/web/key-names.html
    :param text:
    :return: list containing cleaned text, hotkey, and hotkey position within
    cleaned text.