

以下データフォーマットが出力されるログがあります。  
そのログを辞書型で取得する方法はありますでしょうか？  
色々試したりchatgptを利用しましたが適切な回答を得ることが出来ませんでした。

[code]

     1:call                             5:call-in           Grp: null
     2:call                             6:call-call          Grp: null
     3:call-dial   List: 1 DC: 94            7:call-dial   List: 4 DiC: 10
     4:call-dial   List: 1 DC: 95            8:callrelease
     9:call-work     ReaC: 6  Grop: null
    10:call-work     ReaC: 9  Grop: null
    
[/code]

取得したいイメージ

[code]

    [
    {1:"call"},
    {2:"call"},
    {3:"call-dial   List: 1 DC: 94"},
    {4:"call-dial   List: 1 DC: 95"},
    {5:"call-in           Grp: null"},
    {7:"call-dial   List: 4 DiC: 10"},
    {5:"call-in           Grp: null"},
    {8:"callrelease"},
    {9:"call-work     ReaC: 6  Grop: null"},
    {10:"call-work     ReaC: 9  Grop: null"}
    ]
    
[/code]


CC BY-SA 4.0
2023-06-08T02:20:32.557
95136
2023-06-08T04:29:15.467
2023-06-08T04:28:41.823
3060
51133
question
python 正規表現
特定フォーマットのデータを辞書型で抽出したい


自己解決しました。ありがとうございました。

[code]

    config_list = re.findall(r'(\d+):(.*?)(?=\s+\d+:|$)', config_date)
    config_dict_list = [{key: value.strip()} for key, value in config_list]
    
[/code]


CC BY-SA 4.0
2023-06-08T03:02:32.167
95140
2023-06-08T04:29:15.467
2023-06-08T04:29:15.467
3060
51133
95136
answer


既に解決済みですが、`$` ではなく `\n` にすると `str.strip()`
は不要になります。また、質問文にある「取得したいイメージ」では辞書のキーは整数型で、整数値としてソートされている様に見えます。(一部書き間違いの様な部分がありますが)

[code]

    config_list = re.findall(r'(\d+):(.*?)(?=\s+\d+:|\n)', config_date)
    config_dict_list = sorted([{int(key): value} for key, value in config_list],
                              key=lambda x: [*x.keys()])
    
    from pprint import pprint
    pprint(config_dict_list)
    
    # [{1: 'call'},
    #  {2: 'call'},
    #  {3: 'call-dial List: 1 DC: 94'},
    #  {4: 'call-dial List: 1 DC: 95'},
    #  {5: 'call-in Grp: null'},
    #  {6: 'call-call Grp: null'},
    #  {7: 'call-dial List: 4 DiC: 10'},
    #  {8: 'callrelease'},
    #  {9: 'call-work ReaC: 6 Grop: null'},
    #  {10: 'call-work ReaC: 9 Grop: null'}]
    
[/code]


CC BY-SA 4.0
2023-06-08T03:23:21.900
95141
2023-06-08T03:23:21.900
47127
95136
answer