Hello list, I would like to parse IPv6 addresses and subnet using re module in python. I am able to either parse the ipv6 address or ipv6 network but not both using single line. any help appreciated. BTW is there a metacharacter for hex digits.
Thanks Prabhu - --------------------------------------------------------------------- #!/usr/bin/env python2.5 # $Id: $ import re, os, Queue, sys from optparse import OptionParser # for debug purposes only import pdb argc = len(sys.argv) (dirname, program) = os.path.split(sys.argv[0]) def error(Message): if Message: global program print "%s: %s" %(program, Message) sys.exit(1) def cisco_parse(FileName): if FileName: fh = None if os.path.exists(FileName): try: fh = open(FileName, "r") except IOError, message: error(message) else: count = 0 flag = True while flag: try: lines = fh.next() except StopIteration: flag = False else: line = lines.strip() rehex = "[A-Fa-f0-9]" # to parse ipv6 address format = \ "((%s{1,4}:?:){1,7}%s{1,4})" %(rehex, rehex) # to parse ipv6 subnet # format = \ # "((%s{1,4}:?:){1,7}%s{1,4}(?=(::/\d{1,3})))" %(rehex, rehex) reip6 = re.compile(format) match = reip6.search(line) if match is not None: tupleLen = len(match.groups()) if tupleLen == 2: print count, match.groups()[0] elif tupleLen == 3: print count, match.groups()[0] + match.groups()[2] count += 1 fh.close() fh = None def ParseCmdLine(): parser = OptionParser(usage="%prog [options]", version="%prog 1.0") parser.add_option("-f", "--filename", help="cisco config to read", dest="file") (options, args) = parser.parse_args() fileName = None if options.file: fileName = options.file if fileName: cisco_parse(fileName) if __name__ == "__main__": if argc <= 1: error("too few arguments, use -h or --help to view all options") else: ParseCmdLine() -- http://mail.python.org/mailman/listinfo/python-list