import re
regex = re.compile(r"(?P<issuetime>\d+/\w+Z)(?:\s+(?P<layer>\w+/\w+|NOT\s+AVBL)(?:\s+(?P<coordinates>(?:\w\d{4}\s\w\d{5}\s-\s)+\w\d{4}\s\w\d{5}\s))*)?", flags=re.MULTILINE)
test_str = ("FCST VA CLD +6 HR: 16/1200Z SFC/FL200 N4517 W04623 - N6356 W01924 -\n"
"N7750 E07729 - N3856 E06031 - N4517 W04623 FL200/350 N4839 W04904 -\n"
"N7025 E01017 - N7505 E07954 - N6139 E06549 - N4839 W04904\n"
"FCST VA CLD +12 HR: 16/1800Z SFC/FL200 N4010 E03817 - N4900 W04529 -\n"
"N7112 W00641 - N7617 E09941 - N4010 E03817 FL200/350 N4919 W05700 -\n"
"N7300 E03329 - N7732 E09626 - N5936 E09143 - N4919 W05700\n"
"FCST VA CLD +18 HR: 17/0000Z SFC/FL200 N4901 W05420 - N7235 E00056 -\n"
"N7558 E09708 - N3934 E05131 - N4901 W05420 FL200/350 N4933 W03842 -\n"
"N5436 W04127 - N7433 E03732 - N7935 E11430 - N6503 E10238 - N4933\n"
"W03842\n"
"FCST VA CLD +6 HR: 16/1200Z SFC/FL200 N4517 W04623 - N6356 W01924\n"
"FCST VA CLD +12 HR: 16/1800Z NOT AVBL\n"
"FCST VA CLD +18 HR: 17/0000Z NOT AVBL RET\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