import re
regex = re.compile(r"^[A-Z0-9]+(?:-[A-Z0-9]+)?(?:,[A-Z0-9]+(?:-[A-Z0-9]+)?)*$", flags=re.MULTILINE)
test_str = ("//Valid Values\n"
"D1\n"
"DF2,AB2\n"
"D1-2\n"
"A1, A2\n"
"D1 - 2\n"
"1 - FH15\n"
"1-R3\n"
"1,D2\n"
"1,H5,8,S4\n"
"1 , H5, 8, S4\n"
"1, D2, D6-8, 6-9\n"
"1,D2,D6-8,6-9,G2,8\n"
"1-D3,TT6-8\n"
"1-D3, TT6-8\n"
"1-3, VB8, 11-SD13, R15\n\n"
"//Invalid values\n"
"1*, 3\n"
",1,F2\n"
"-1-TG3\n"
"12-D4,\n"
"D1-F2-\n"
"1- F2- 4\n"
"D10,/\n"
"1234s\n"
"F4-,8\n"
"4,-H5\n"
"D3-F-G7\n"
"D3 - F - G7\n"
"4 , - H5\n"
"1*,D\n"
"12 - D4")
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