import re
regex = re.compile(r"\bBYPASS(?: \d){3}\n *<VST \"VST: (?!FreeG\b)[\s\S]*?\n *>(?:\n(?! *<).*)*\n *WAK \d \d\b", flags=re.MULTILINE)
test_str = ("<REAPER_PROJECT 0.1 \"6.66/win64\" 1661967203\n"
" <NOTES 0 2\n"
" >\n"
" RIPPLE 0\n"
" GROUPOVERRIDE 0 0 0\n"
" AUTOXFADE 1\n"
" ENVATTACH 3\n"
" POOLEDENVATTACH 0\n"
" MIXERUIFLAGS 11 48\n"
" PEAKGAIN 1\n"
" FEEDBACK 0\n"
" PANLAW 1\n"
" PROJOFFS 0 0 0\n"
" MAXPROJLEN 0 600\n"
" GRID 3199 8 1 8 1 0 0 0\n"
" TIMEMODE 1 5 -1 30 0 0 -1\n"
" VIDEO_CONFIG 0 0 256\n"
" PANMODE 3\n"
" CURSOR 0\n"
" ZOOM 41.11416036604871 0 0\n"
" VZOOMEX 6 0\n"
" USE_REC_CFG 0\n"
" RECMODE 1\n"
" SMPTESYNC 0 30 100 40 1000 300 0 0 1 0 0\n"
" LOOP 0\n"
" LOOPGRAN 0 4\n"
" RECORD_PATH \"\" \"\"\n"
" <RECORD_CFG\n"
" ZXZhdxgAAA==\n"
" >\n"
" <APPLYFX_CFG\n"
" >\n"
" RENDER_FILE \"\"\n"
" RENDER_PATTERN \"\"\n"
" RENDER_FMT 0 2 0\n"
" RENDER_1X 0\n"
" RENDER_RANGE 1 0 0 18 1000\n"
" RENDER_RESAMPLE 3 0 1\n"
" RENDER_ADDTOPROJ 0\n"
" RENDER_STEMS 0\n"
" RENDER_DITHER 0\n"
" TIMELOCKMODE 1\n"
" TEMPOENVLOCKMODE 1\n"
" ITEMMIX 1\n"
" DEFPITCHMODE 589824 0\n"
" TAKELANE 1\n"
" SAMPLERATE 44100 0 0\n"
" <RENDER_CFG\n"
" ZXZhdxgAAA==\n"
" >\n"
" LOCK 1\n"
" <METRONOME 6 2\n"
" VOL 0.25 0.125\n"
" FREQ 800 1600 1\n"
" BEATLEN 4\n"
" SAMPLES \"\" \"\"\n"
" PATTERN 2863311530 2863311529\n"
" MULT 1\n"
" >\n"
" GLOBAL_AUTO -1\n"
" TEMPO 120 4 4\n"
" PLAYRATE 1 0 0.25 4\n"
" SELECTION 0 0\n"
" SELECTION2 0 0\n"
" MASTERAUTOMODE 0\n"
" MASTERTRACKHEIGHT 0 0\n"
" MASTERPEAKCOL 16576\n"
" MASTERMUTESOLO 0\n"
" MASTERTRACKVIEW 0 0.6667 0.5 0.5 -1 -1 -1 0 0 0 -1 -1 0\n"
" MASTERHWOUT 0 0 1 0 0 0 0 -1\n"
" MASTER_NCH 2 2\n"
" MASTER_VOLUME 1 0 -1 -1 1\n"
" MASTER_PANMODE 3\n"
" MASTER_FX 1\n"
" MASTER_SEL 0\n"
" <MASTERPLAYSPEEDENV\n"
" EGUID {07BFCFC9-6DA0-4D9C-8821-7D1555F3F3F8}\n"
" ACT 0 -1\n"
" VIS 0 1 1\n"
" LANEHEIGHT 0 0\n"
" ARM 0\n"
" DEFSHAPE 0 -1 -1\n"
" >\n"
" <TEMPOENVEX\n"
" EGUID {9059CD91-68BB-42A7-8E08-BCDDCB3AC50B}\n"
" ACT 0 -1\n"
" VIS 1 0 1\n"
" LANEHEIGHT 0 0\n"
" ARM 0\n"
" DEFSHAPE 1 -1 -1\n"
" >\n"
" <PROJBAY\n"
" >\n"
" <TRACK {6186BBDC-D455-4398-90C0-668CF17125E9}\n"
" NAME DAC\n"
" PEAKCOL 16576\n"
" BEAT -1\n"
" AUTOMODE 0\n"
" VOLPAN 1 0 -1 -1 1\n"
" MUTESOLO 0 0 0\n"
" IPHASE 0\n"
" PLAYOFFS 0 1\n"
" ISBUS 0 0\n"
" BUSCOMP 0 0 0 0 0\n"
" SHOWINMIX 1 0.6667 0.5 1 0.5 -1 -1 -1\n"
" SEL 1\n"
" REC 0 0 1 0 0 0 0 0\n"
" VU 2\n"
" TRACKHEIGHT 0 0 0 0 0 0\n"
" INQ 0 0 0 0.5 100 0 0 100\n"
" NCHAN 2\n"
" FX 1\n"
" TRACKID {6186BBDC-D455-4398-90C0-668CF17125E9}\n"
" PERF 0\n"
" MIDIOUT -1\n"
" MAINSEND 1 0\n"
" <FXCHAIN\n"
" WNDRECT 500 247 511 642\n"
" SHOW 0\n"
" LASTSEL 1\n"
" DOCKED 0\n"
" BYPASS 0 0 0\n"
" <VST \"VST: Saturation Knob (Softube)\" \"Saturation Knob.dll\" 0 \"\" 1935766638<5653547361746E73617475726174696F> \"\"\n"
" bnRhc+9e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAAAAAAAEAAAAAAAAAAAABAA\n"
" 776t3g3wrd5mZmY+AAAAPw==\n"
" RGVmYXVsdABEZWZhdWx0ABAAAAA=\n"
" >\n"
" PRESETNAME Default\n"
" FLOATPOS 0 0 0 0\n"
" FXID {A9ED49E2-2CFE-4675-A539-CFA091920D52}\n"
" WAK 0 0\n"
" BYPASS 0 0 0\n"
" <VST \"VST: FreeG (Sonalksis)\" \"Sonalksis FreeG Stereo (64 bit).dll\" 0 \"\" 1181894483<56535446724753667265656700000000> \"\"\n"
" U0dyRu5e7f4CAAAAAQAAAAAAAAACAAAAAAAAAAIAAAABAAAAAAAAAAIAAAAAAAAAPAAAAAEAAAAAABAA\n"
" V0oxPgAAAD8AAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAA\n"
" AE5vbmUAEAAAAA==\n"
" >\n"
" PRESETNAME None\n"
" FLOATPOS 0 0 0 0\n"
" FXID {36381E0B-FD44-4B23-BA25-E9CC29920FFB}\n"
" WAK 0 0\n"
" >\n"
" <ITEM\n"
" POSITION 0\n"
" SNAPOFFS 0\n"
" LENGTH 14.22222222222222\n"
" LOOP 1\n"
" ALLTAKES 0\n"
" FADEIN 1 0.01 0 1 0 0 0\n"
" FADEOUT 1 0.01 0 1 0 0 0\n"
" MUTE 0 0\n"
" SEL 1\n"
" IGUID {8FA4C4EF-ACED-4A1E-B4E0-AAAF41D8BCA4}\n"
" IID 1\n"
" NAME dac.wav\n"
" VOLPAN 1 0 1 -1\n"
" SOFFS 0\n"
" PLAYRATE 1 1 0 -1 0 0.0025\n"
" CHANMODE 0\n"
" GUID {FD68F37C-6841-45B5-803E-83BB63FA6E98}\n"
" <SOURCE WAVE\n"
" FILE \"dac.wav\"\n"
" >\n"
" >\n"
" >\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