# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"^\w+(?=\s+OBJECT-TYPE)"
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 = re.finditer(regex, test_str, re.IGNORECASE | 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