import re
regex = re.compile(r"^<(?<Direction>(Send|Recv)) TYPE=\"\"(?<Function>.+?)\"\" UTC=\"\"(?<date>.+?)\"\" ID=\"\"(?<ID>.+?)\"\"(?:\s*\/>|>(?<Message>.*?)<\/\1>)$", flags=re.DOTALL | re.IGNORECASE | re.MULTILINE)
test_str = ("<Recv TYPE=\"Select.req\" UTC=\"05.11.2024 01:43:35\" ID=\"2130706432\" />\n"
"<Send TYPE=\"Select.req\" UTC=\"05.11.2024 01:43:35\" ID=\"1152\" />\n"
"<Send TYPE=\"Select.rsp\" UTC=\"05.11.2024 01:43:35\" ID=\"2130706432\" />\n"
"<Send TYPE=\"S1F13W\" UTC=\"05.11.2024 01:43:35\" ID=\"1153\">\n"
" <List Items=\"2\">\n"
" <Ascii Size=\"17\" ItemName=\"MDLN\">SECSService</Ascii>\n"
" <Ascii Size=\"20\" ItemName=\"SOFTREV\">1.0</Ascii>\n"
" </List>\n"
"</Send>\n"
"<Recv TYPE=\"Select.rsp\" UTC=\"05.11.2024 01:43:35\" ID=\"1152\" />\n"
"<Recv TYPE=\"S1F14\" UTC=\"05.11.2024 01:43:36\" ID=\"1153\">\n"
" <List Items=\"2\">\n"
" <Binary Size=\"4\">0x00</Binary>\n"
" <List Items=\"0\" />\n"
" </List>\n"
"</Recv>\n"
"<Recv TYPE=\"S1F13W\" UTC=\"05.11.2024 01:43:36\" ID=\"1\">\n"
" <List Items=\"0\" />\n"
"</Recv>\n"
"<Send TYPE=\"S2F34\" UTC=\"05.11.2024 01:43:38\" ID=\"4\">\n"
" <Binary Size=\"4\" ItemName=\"DRACK\">0x00</Binary>\n"
"</Send>\n"
"<Recv TYPE=\"S2F37W\" UTC=\"05.11.2024 01:43:39\" ID=\"5\">\n"
" <List Items=\"2\">\n"
" <Boolean Size=\"5\">False</Boolean>\n"
" <List Items=\"17\">\n"
" <UInt32 Size=\"1\">1</UInt32>\n"
" <UInt32 Size=\"1\">2</UInt32>\n"
" <UInt32 Size=\"1\">3</UInt32>\n"
" <UInt32 Size=\"1\">5</UInt32>\n"
" <UInt32 Size=\"1\">6</UInt32>\n"
" <UInt32 Size=\"2\">10</UInt32>\n"
" <UInt32 Size=\"2\">11</UInt32>\n"
" <UInt32 Size=\"2\">20</UInt32>\n"
" <UInt32 Size=\"2\">21</UInt32>\n"
" <UInt32 Size=\"2\">22</UInt32>\n"
" <UInt32 Size=\"2\">40</UInt32>\n"
" <UInt32 Size=\"2\">41</UInt32>\n"
" <UInt32 Size=\"2\">42</UInt32>\n"
" <UInt32 Size=\"2\">50</UInt32>\n"
" <UInt32 Size=\"2\">52</UInt32>\n"
" <UInt32 Size=\"2\">70</UInt32>\n"
" <UInt32 Size=\"2\">71</UInt32>\n"
" </List>\n"
" </List>\n"
"</Recv>")
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