import re
regex = re.compile(r"<it-grid[\n\s\S]*?([\[\(]selectedItems[\]\)])", flags=re.MULTILINE)
test_str = (" <it-grid\n"
" [columns]=\"groupExternalColumns\"\n"
" [items]=\"groupExternalItems\"\n"
" [selection]=\"groupExternalGridSelection\"\n"
" [selectedItems]=\"groupExternalFilterSelection\"\n"
" (selectedItemsChange)=\"onSelectedExternalGroupsChanged($event)\"\n"
" [cellTemplates]=\"{ nameAndDesc: nameTemplate, settings: settingsTemplate }\"\n"
" [idPrefix]=\"'groupExternalSelectorGrid'\"\n"
" [comparator]=\"gridPrincipalCompare\"\n"
" >\n\n\n"
" <it-grid\n"
" class=\"activities-list activities-list__table\"\n"
" [selection]=\"gridSelection\"\n"
" [paginationOptions]=\"gridPaginationOptions\"\n"
" (paginationChanged)=\"paginationChanged()\"\n"
" [idPrefix]=\"'endpointMonitoringListGrid'\"\n"
" [columns]=\"endpointMonitoringColumns\"\n"
" [items$]=\"endpointMonitoringData$\"\n"
" [highlightHovered]=\"true\"\n"
" [selectedItemNotifier]=\"selectedConfiguration$\"\n"
" [cellTemplates]=\"{\n"
" display: displayTemplate\n"
" }\"\n"
" (selectionChange)=\"onGridSelectionChanged($event)\"\n"
" (columnRemove)=\"onGridColumnRemoved($event)\"\n"
" [useCustomContextMenu]=\"true\"\n"
" (customContextMenuClick)=\"openContextMenu($event)\"\n"
" (columnFilter)=\"filterOpen($event)\"\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