# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^(?<name>[A-Z][a-z]{3,7})(\s+(?<family>[A-Z][a-z]{2,}))?(\s+(?<facultyNumber>\d{5,10}))?$"
test_str = ("Valid All 12345\n"
"Valid Names\n"
"With 123456\n"
"Name\n"
"Invalid Faculcy 111111111111111\n"
"Invalid family 22222222\n"
"invalid Name 33333333\n"
"Verylongname Error\n"
"InvaliD Name 44444\n"
"Invalid FamilY 55555\n"
"Name12345\n"
"Long Familiiiiiiiiiiiiiiiii 12345")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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