import re
regex = r"^(.+?) as \((.*(?:\n(?!.* as \().*)*)\n\)"
dict_result = {}
s = ("with \n"
"qry_1 as ( -- some text\n"
" SELECT ID, \n"
" NAME\n"
" FROM ( ... other code...\n"
"),\n"
"qry_2 as ( \n"
" SELECT coalesce (table1.ID, table2.ID) as ID,\n"
" NAME\n"
" FROM (...other code...\n"
"),\n"
"qry_3 as (\n"
"-- some text\n"
" SELECT id.WEATHER AS WEATHER_MORN,\n"
" ROW_NUMBER() OVER(PARTITION BY id.SUN\n"
" ORDER BY id.TIME) AS SUN_TIME,\n"
" id.RAIN,\n"
" id.MIST\n"
" FROM (...other code..\n"
"-- some other text\n"
")")
for tup in re.findall(regex, s, re.MULTILINE):
matches = re.findall(r"-- (.*)", tup[1])
dict_result[tup[0]] = matches if len(matches) > 0 else None
print(dict_result)
aW1wb3J0IHJlCgpyZWdleCA9IHIiXiguKz8pIGFzIFwoKC4qKD86XG4oPyEuKiBhcyBcKCkuKikqKVxuXCkiCmRpY3RfcmVzdWx0ID0ge30KcyA9ICgid2l0aCBcbiIKICAgICAgICAgICAgInFyeV8xIGFzICggLS0gc29tZSB0ZXh0XG4iCiAgICAgICAgICAgICIgICBTRUxFQ1QgSUQsIFxuIgogICAgICAgICAgICAiICAgICAgICAgIE5BTUVcbiIKICAgICAgICAgICAgIiAgIEZST00gICAoIC4uLiBvdGhlciBjb2RlLi4uXG4iCiAgICAgICAgICAgICIpLFxuIgogICAgICAgICAgICAicXJ5XzIgYXMgKCBcbiIKICAgICAgICAgICAgIiAgICBTRUxFQ1QgY29hbGVzY2UgKHRhYmxlMS5JRCwgdGFibGUyLklEKSBhcyBJRCxcbiIKICAgICAgICAgICAgIiAgICAgICAgICAgTkFNRVxuIgogICAgICAgICAgICAiICAgRlJPTSAoLi4ub3RoZXIgY29kZS4uLlxuIgogICAgICAgICAgICAiKSxcbiIKICAgICAgICAgICAgInFyeV8zIGFzIChcbiIKICAgICAgICAgICAgIi0tIHNvbWUgdGV4dFxuIgogICAgICAgICAgICAiICAgICBTRUxFQ1QgaWQuV0VBVEhFUiBBUyBXRUFUSEVSX01PUk4sXG4iCiAgICAgICAgICAgICIgICAgICAgICAgICBST1dfTlVNQkVSKCkgT1ZFUihQQVJUSVRJT04gQlkgaWQuU1VOXG4iCiAgICAgICAgICAgICIgICAgICAgICAgICAgICAgT1JERVIgQlkgaWQuVElNRSkgQVMgU1VOX1RJTUUsXG4iCiAgICAgICAgICAgICIgICAgICAgICAgICBpZC5SQUlOLFxuIgogICAgICAgICAgICAiICAgICAgICAgICAgaWQuTUlTVFxuIgogICAgICAgICAgICAiICAgRlJPTSAoLi4ub3RoZXIgY29kZS4uXG4iCiAgICAgICAgICAgICItLSBzb21lIG90aGVyIHRleHRcbiIKICAgICAgICAgICAgIikiKQoKZm9yIHR1cCBpbiByZS5maW5kYWxsKHJlZ2V4LCBzLCByZS5NVUxUSUxJTkUpOgogICAgbWF0Y2hlcyA9IHJlLmZpbmRhbGwociItLSAoLiopIiwgdHVwWzFdKQogICAgZGljdF9yZXN1bHRbdHVwWzBdXSA9IG1hdGNoZXMgaWYgbGVuKG1hdGNoZXMpID4gMCBlbHNlIE5vbmUKCnByaW50KGRpY3RfcmVzdWx0KQ==