import re
regex = re.compile(r"^[A-Z](([A-Z]{1,2}[a-z0-9]+)+([A-Z]{1,3}[a-z0-9]+)*[A-Z]{0,3}|([a-z0-9]+[A-Z]{0,3})*|[A-Z]{1,2})$", flags=re.MULTILINE)
test_str = ("ABCD\n"
"ABCDE\n"
"snake_case\n"
"camelCase\n"
"2PascalCase\n"
"streamIOIO\n"
"gREATERDtha\n"
"MdeADFAFdsADFads\n"
"DeviceSNSD\n"
"AabcABCD\n"
"AabcABCDabcABCD\n"
"ABabcABCD\n"
"ABabcABCDabcABCD\n"
"ABCabcABCD\n"
"ABCabcABCDabcABCDabcABCDabcABCD\n"
"ABCDabcABCD\n"
"ABCDabcABCDabcABCDabcABCDabcABCD\n"
"HTMLParser\n"
"ContextHTMLParser\n"
"ABabcABCDbcABC\n"
"ABCDabcABC\n"
"ABCDabcAB\n"
"ABCDabcA\n"
"CamelCa_1\n"
"HELLO\n"
"AaABC\n"
"PacalCasePacalCasePacalCasePacalCasePacalCasePacalCase\n"
"AabcABCabcABC\n"
"MoeADFdsADFads\n"
"ABCabcABC\n"
"ABCabcAB\n"
"ABabcABC\n"
"ABabcAB\n"
"AabcAB\n"
"ABCabcABCabcA\n"
"ABCabcA\n"
"Aabc123\n"
"AabcABC\n"
"A\n"
"AB\n"
"ABC\n"
"StreamIO\n"
"IOStream\n"
"DeviceID\n"
"DeviceSNS\n"
"Context\n"
"PascalCase\n"
"Pascal2Case\n"
"PascalCaseA\n"
"Pascal2CaseA\n"
"ModeA\n"
"Mode2A\n"
"Mode2A2\n"
"Mode2A2A\n"
"CreateAMode\n"
"CreateBMode\n"
"MadeEasy\n"
"WonderFul\n"
"AndMe\n"
"HtmlParser\n"
"H\n"
"AaA\n"
"Camel01C\n"
"Camel01c01\n"
"Camel01C01\n"
"Camel01CC01\n"
"Camel0a1c1\n"
"Camel0a1C1\n"
"Camel0ac1b1C1\n"
"CamelC\n"
"CamelC1\n"
"CamelCA\n"
"CamelCa1\n"
"IbsReleaseTestVerificationRegressionSuite\n"
"IbsReleaseTestVerificationRegressioNSuite\n"
"IbsReleaseTestVerificationRegressioN\n"
"XmlHttpRequest\n"
"NewCustomerId\n"
"InnerStopwatch\n"
"SupportsIpv6OnIos\n"
"YouTubeImporter\n"
"YoutubeImporter\n"
"Affine3D")
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