'Initialize the header Column objects from the table ``lines`` for a SExtractor
header.  The SExtractor header is specialized so that we just copy the entire BaseHeader
get_cols routine and modify as needed.
Parameters
lines : list
List of table lines'

def get_cols(self, lines):

    columns = {}
    re_name_def = re.compile('^\\s*    \\#    \\s*                                                    #    possible    whitespace    around    #\n                                                                                                                                    (?P<colnumber>    [0-9]+)\\s+            #    number    of    the    column    in    table\n                                                                                                                                    (?P<colname>    [-\\w]+)                                #    name    of    the    column\n                                                                                                                                    (?:\\s+(?P<coldescr>    \\w    .+)        #    column    description,    match    any    character    until...\n                                                                                                                                    (?:(?<!(\\]))$|(?=(?:(?<=\\S)\\s+\\[.+\\]))))?        #    ...until    [non-space][space][unit]    or    [not-right-bracket][end]\n                                                                                                                                    (?:\\s*\\[(?P<colunit>.+)\\])?.*    #    match    units    in    brackets\n                                                                                                                                    ', re.VERBOSE)
    dataline = None
    for line in lines:
        if (not line.startswith('#')):
            dataline = line
            break
        else:
            match = re_name_def.search(line)
            if match:
                colnumber = int(match.group('colnumber'))
                colname = match.group('colname')
                coldescr = match.group('coldescr')
                colunit = match.group('colunit')
                columns[colnumber] = (colname, coldescr, colunit)
    colnumbers = sorted(columns)
    if (dataline is not None):
        n_data_cols = len(dataline.split())
    else:
        n_data_cols = colnumbers[(-1)]
    columns[(n_data_cols + 1)] = (None, None, None)
    colnumbers.append((n_data_cols + 1))
    if (len(columns) > 1):
        previous_column = 0
        for n in colnumbers:
            if (n != (previous_column + 1)):
                for c in range((previous_column + 1), n):
                    column_name = (columns[previous_column][0] + '_{}'.format((c - previous_column)))
                    column_descr = columns[previous_column][1]
                    column_unit = columns[previous_column][2]
                    columns[c] = (column_name, column_descr, column_unit)
            previous_column = n
    colnumbers = sorted(columns)[:(-1)]
    self.names = []
    for n in colnumbers:
        self.names.append(columns[n][0])
    if (not self.names):
        raise core.InconsistentTableError('No    column    names    found    in    SExtractor    header')
    self.cols = []
    for n in colnumbers:
        col = core.Column(name=columns[n][0])
        col.description = columns[n][1]
        col.unit = columns[n][2]
        self.cols.append(col)
