{} を含む文字列を {} の前後でリストに分割し、{} 自体は空文字とする方法

[code]

    sample = "アイス{}{}ー"
    
[/code]

という文があるとします。  
この中の `{}` を、分割をす‌​るパワーを持つもの、デ‌​ィヴィジョナー・分割者（独自用語です）と考えます。  
（デリミタというのは辞書で調べると、データの区切りにつけるマークということで、‌​たとえば、この場合だと、コンマ(`,`)だと‌​考えました。なので、分割をす‌​るパワーを持つものを、`{}`として、デ‌​ィヴィジョナーとしたつもりです）

[code]

    sample.split("{}")
    
[/code]

とすると、  
通常の結果は、

[code]

    ["アイス","","ー"]
    
[/code]

となります。  
これを、

[code]

    ["アイス","","","ー"]
    
[/code]

と出力する方法はありますか？




`{}` が空文字を生成するということは、`{` と `}`
は、文字列を囲むための構文であると考えられます（こういった構文の一部は、文脈によって、クォートと呼ばれることがあります）。  
以下はそれを前提とします。  
つまり、`{abc}` は `abc` になります。

### 正規表現

正規表現だと、例えばこのような表現が考えられます。

[code]

    #!/usr/bin/python3
    import re
    quoted = "アイス{}{}ー"
    
    words = re.findall("[^{}]+|(?<={)[^{}]*(?=})", quoted)
    print(words)
    
[/code]

出力:

[code]

    ['アイス', '', '', 'ー']
    
[/code]

[`re.X`フラグ](https://docs.python.jp/3/library/re.html#re.X)で説明を付けたのが以下です。

[code]

    words = re.findall(
        """
            # 囲われていない部分
            [^{}]+
        |
            # { } で囲われている部分
                # { は結果に含めない
                (?<={)
                    # 中身
                    [^{}]*
                # } は結果に含めない
                (?=})
        """,
        quoted,
        flags=re.X
    )
    
[/code]

### 正規表現の補助的な使用

将来のことを考えると、正規表現の使用は控えめにするべきです。

[code]

    words = re.findall("[^ {} ]+  |  [ {} ]", quoted, flags=re.X)
    print("words:", words)
    
    prev = None
    result = []
    for w in words:
        if w not in "{}":
            result.append(w)
        elif prev == "{" and w == "}":
            result.append("")
        prev = w
    print("result:", result)
    
[/code]

出力:

[code]

    words: ['アイス', '{', '}', '{', '}', 'ー']
    result: ['アイス', '', '', 'ー']
    
[/code]




`{}` が空文字を生成するということは、`{` と `}`
は、文字列を囲むための構文であると考えられます（こういった構文の一部は、文脈によって、クォートと呼ばれることがあります）。  
以下はそれを前提とします。  
つまり、`{abc}` は `abc` になります。

### 正規表現

正規表現だと、例えばこのような表現が考えられます。

[code]

    #!/usr/bin/python3
    import re
    quoted = "アイス{}{}ー"
    
    words = re.findall("[^{}]+|(?<={)[^{}]*(?=})", quoted)
    print(words)
    
[/code]

出力:

[code]

    ['アイス', '', '', 'ー']
    
[/code]

[`re.X`フラグ](https://docs.python.jp/3/library/re.html#re.X)で説明を付けたのが以下です。

[code]

    words = re.findall(
        """
            # 囲われていない部分
            [^{}]+
        |
            # { } で囲われている部分
                # { は結果に含めない
                (?<={)
                    # 中身
                    [^{}]*
                # } は結果に含めない
                (?=})
        """,
        quoted,
        flags=re.X
    )
    
[/code]

### 正規表現の補助的な使用

将来のことを考えると、正規表現の使用は控えめにするべきです。

[code]

    words = re.findall("[^ {} ]+  |  [ {} ]", quoted, flags=re.X)
    print("words:", words)
    
    prev = None
    result = []
    for w in words:
        if w not in "{}":
            result.append(w)
        elif prev == "{" and w == "}":
            result.append("")
        prev = w
    print("result:", result)
    
[/code]

出力:

[code]

    words: ['アイス', '{', '}', '{', '}', 'ー']
    result: ['アイス', '', '', 'ー']
    
[/code]

