import re
regex = re.compile(r"^\w+(?=\s+OBJECT-TYPE)", flags=re.IGNORECASE | re.MULTILINE)
test_str = ("STEELHEAD-MIB DEFINITIONS ::= BEGIN\n\n"
"IMPORTS\n"
" OBJECT-TYPE, MODULE-IDENTITY, NOTIFICATION-TYPE, Unsigned32,\n"
" TimeTicks, IpAddress, Counter32, Counter64 FROM SNMPv2-SMI\n"
" DateAndTime FROM SNMPv2-TC\n"
" products FROM RBT-MIB;\n\n"
"steelhead MODULE-IDENTITY\n"
" LAST-UPDATED \"201401070000Z\"\n"
" ORGANIZATION \"Riverbed Technology, Inc.\"\n"
" CONTACT-INFO\n"
" \" Riverbed Technical Support\n"
" support@riverbed.com\"\n"
" DESCRIPTION \"Steelhead MIB\"\n"
" REVISION \"201401070000Z\"\n"
" DESCRIPTION \"Connection forwarding cluster incompatible trap\"\n"
" REVISION \"201301250000Z\"\n"
" DESCRIPTION \"Corrections in descriptions of some traps\"\n"
" REVISION \"201210170000Z\"\n"
" DESCRIPTION \"Added trap for CF Peer IPv6 incompatible alarm\"\n"
" REVISION \"201202030000Z\"\n"
" DESCRIPTION \"Updated for 7.0.1\"\n"
" ::= { products 1 }\n\n"
"system OBJECT IDENTIFIER\n"
" ::= { steelhead 1 }\n\n"
"status OBJECT IDENTIFIER\n"
" ::= { steelhead 2 }\n\n"
"config OBJECT IDENTIFIER\n"
" ::= { steelhead 3 }\n\n"
"alarms OBJECT IDENTIFIER\n"
" ::= { steelhead 4 }\n\n"
"statistics OBJECT IDENTIFIER\n"
" ::= { steelhead 5 }\n\n"
"--\n"
"--\n"
"-- SYSTEM\n"
"--\n"
"--\n\n"
"model OBJECT-TYPE\n"
" SYNTAX OCTET STRING\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"Appliance model\"\n"
" ::= { system 1 }\n\n"
"serialNumber OBJECT-TYPE\n"
" SYNTAX OCTET STRING\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"Appliance serial number\"\n"
" ::= { system 2 }\n\n"
"systemVersion OBJECT-TYPE\n"
" SYNTAX OCTET STRING\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"System software version string\"\n"
" ::= { system 3 }\n\n\n\n"
"--\n"
"--\n"
"-- STATUS\n"
"--\n"
"--\n\n"
"systemClock OBJECT-TYPE\n"
" SYNTAX DateAndTime\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"System clock time\"\n"
" ::= { status 1 }\n\n"
"health OBJECT-TYPE\n"
" SYNTAX OCTET STRING\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"Current health of the system. The value is one amongst\n"
" Healthy, Admission Control, Degraded, Critical\"\n"
" ::= { status 2 }\n\n"
"serviceStatus OBJECT-TYPE\n"
" SYNTAX OCTET STRING\n"
" MAX-ACCESS read-only\n"
" STATUS current\n"
" DESCRIPTION\n"
" \"Current status of the optimization service\"\n"
" ::= { status 3 }")
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