Вы можете использовать это регулярное выражение, которое будет соответствовать последнему набору символов слова (включая -
) перед :
в группе 1, а затем все остальное до следующего комментария (###
) или конца строка в группу 2:
([\w-]+)\s*:\s*(.*?)(?=\s*###|$)
Затем вы можете создать словарь, перебирая две группы для каждого совпадения в строке:
import re
test_string = """
###Some Comment
First-tags :
{
"tag1": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
},
"tag2": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
}
so on .....
}
###2nd Comment
Second-tags :
{
"tag1": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
},
"tag2": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
}
so on .....
}
###Some other Comment
someother-tags :
{
"tag1": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
},
"tag2": {
"tagKey1": "tagValue1",
"tagKey2": "tagValue2"
}
so on .....
}
"""
res = {}
for match in re.finditer(r'([\w-]+)\s*:\s*(.*?)(?=\s*###|$)', test_string, re.S):
res[match.group(1)] = match.group(2)
print(res)
Вывод:
{
'First-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }',
'Second-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }',
'someother-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }'
}
Обновление
Если вы также используете sh для получения комментариев, вы можете использовать этот код:
res = {}
for match in re.finditer(r'###([^\n]+)\s*([\w-]+)\s*:\s*(.*?)(?=\s*###|$)', test_string, re.S):
res[match.group(1)] = { match.group(2) : match.group(3) }
print(res)
Вывод:
{
'Some Comment ': {
'First-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }'
},
'2nd Comment ': {
'Second-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }'
},
'Some other Comment ': {
'someother-tags': '{\n "tag1": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n },\n "tag2": {\n "tagKey1": "tagValue1",\n "tagKey2": "tagValue2"\n }\n so on .....\n }'
}
}