import re
regex = re.compile(r"^([a-zA-Z]+)\s*\{(.*?)}(?=\n[a-zA-Z]+\s*{\n|\Z)", flags=re.MULTILINE | re.DOTALL)
test_str = ("BackdropNode {\n"
" inputs 0\n"
" name BackdropNode6\n"
" tile_color 0x555555ff\n"
" label RDN\n"
" note_font_size 42\n"
" xpos -1136\n"
" ypos -4272\n"
" bdwidth 451\n"
" bdheight 529\n"
"}\n"
"Write {\n"
" file \"\\[value project_directory]/_output_/\\[string range \\[file tail \\[value root.name]] 0 20].mov\"\n"
" colorspace sRGB\n"
" raw true\n"
" file_type mov\\{(.*?)\\}\n"
" mov64_format \"mov (QuickTime / MOV)\"\n"
" mov64_codec AVdh\n"
" mov64_dnxhd_codec_profile \"DNxHD 422 8-bit 145Mbit\"\n"
" mov64_dnxhr_codec_profile \"SQ 4:2:2 8-bit\"\n"
" mov64_pixel_format {{0} \"yuv420p\\tYCbCr 4:2:0 8-bit\"}\n"
" mov64_quality High\n"
" mov64_advanced 1\n"
" mov64_write_timecode true\n"
" mov64_gop_size 12\n"
" mov64_b_frames 0\n"
" mov64_bitrate 20000\n"
" mov64_bitrate_tolerance 40000000\n"
" mov64_quality_min 2\n"
" mov64_quality_max 31\n"
" render_order 3\n"
" checkHashOnRead false\n"
" version 132\n"
" in_colorspace scene_linear\n"
" out_colorspace scene_linear\n"
" name Write2\n"
" xpos -1025\n"
" ypos 2230\n"
"}")
matches = regex.finditer(test_str)
for match_num, match in enumerate(matches, start=1):
print(f"Match {match_num} was found at {match.start()}-{match.end()}: {match.group()}")
for group_num, group in enumerate(match.groups(), start=1):
print(f"Group {group_num} found at {match.start(group_num)}-{match.end(group_num)}: {group}")
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for Python, please visit: https://docs.python.org/3/library/re.html