大宮盆栽デイズ - Omiya Bonsai Days -

冗談めかす埼玉のファインマン

@CheckiO@Between Markers

答えを出すまでに時間がかかっています。それでも、考えているときは楽しく、(とりあえず)解決コードができたらうれしい気持ちになります。
◆ ◆ ◆
時間がかかる、という点でセンスが無いようにも思います。一方で、時間がかかっても粘って取り組むことができる、という点では「(コードを作るのに)向いている」ようにも考えられます。
◆ ◆ ◆
向いているのか、センスが無いのか、どっちなのだろうか。趣味でやっている範囲だから楽しいだけなのだろうか...。

def between_markers(text: str, begin: str, end: str) -> str:
    """
        returns substring between two given markers
    """
    # もしイニシャルマーカーがないなら、開始インデックスの数値を「0」とする。
    if text.find(begin) == -1:
        start_idx = 0
    # イニシャルマーカーが見つかったら、インデックスの数値に
    # マーカー自身の文字数を足す。
    else:
        start_idx = text.find(begin) + len(begin)

    # もしファイナルマーカーがないなら、終了インデックスの数値を
    # 「テキスト自身の文字数」とする。
    if text.find(end) == -1:
        end_idx = len(text)
    # ファイナルマーカーを見つけたら、その位置を終了インデックスの数値とする。
    else:
        end_idx = text.find(end)

    # テキストという文字列の開始インデックスから終了インデックスまでを切り取る。
    return text[start_idx:end_idx]


if __name__ == '__main__':
    print('Example:')
    print(between_markers('What is >apple<', '>', '<'))

    # These "asserts" are used for self-checking and not for testing
    assert between_markers('What is >apple<', '>', '<') == "apple", "One sym"
    assert between_markers("<head><title>My new site</title></head>",
                           "<title>", "</title>") == "My new site", "HTML"
    assert between_markers('No[/b] hi', '[b]', '[/b]') == 'No', 'No opened'
    assert between_markers('No [b]hi', '[b]', '[/b]') == 'hi', 'No close'
    assert between_markers('No hi', '[b]', '[/b]') == 'No hi', 'No markers at all'
    assert between_markers('No <hi>', '>', '<') == '', 'Wrong direction'
    print('Wow, you are doing pretty good. Time to check it!')