def match_input_fmt_1(self, fmt):
        """
        Given a single format specifier, e.g., '2X', 'I5', etc., this function
        constructs a list of tuples for matching against that specifier. Each
        element of this list is a tuple

               (xtract_re, cvt_re, divisor, cvt_fn)

        where:

           xtract_re is a regular expression that extracts an input field of
                   the requisite width;
           cvt_re is a regular expression that matches the character sequence
                   extracted by xtract_re against the specified format;
           divisor is the value to divide by in order to get the appropriate
                   number of decimal places if a decimal point is not given
                   in the input value (meaningful only for floats); and
           cvt_fn is a string denoting the function to be used to convert the
                   matched string to a value.
        """

        # first, remove any surrounding space
        fmt = fmt.strip()

        # get any leading digits indicating repetition
        match = re.match("(\d+)(.+)", fmt)
        if match is None:
            reps = 1
        else:
            reps = int(match.group(1))
            fmt = match.group(2)

        if fmt[0] == "(":  # process parenthesized format list recursively
            fmt = fmt[1:-1]
            fmt_list = fmt.split(",")
            rexp = self.match_input_fmt(fmt_list)
        else:
            if fmt[0] in "iI":  # integer
                sz = fmt[1:]
                xtract_rexp = "(.{" + sz + "})"  # r.e. for extraction
                leading_sp = " *"
                optional_sign = "-?"
                rexp0 = "\d+"
                rexp1 = leading_sp + optional_sign + rexp0  # r.e. for matching
                divisor = 1
                rexp = [(xtract_rexp, rexp1, divisor, "int")]

            elif fmt[0] in "xX":  # skip
                xtract_rexp = "."  # r.e. for extraction
                rexp = [(xtract_rexp, None, None, None)]

            elif fmt[0] in "fF":  # floating point
                idx0 = fmt.find(".")
                sz = fmt[1:idx0]
                divisor = 10 ** (int(fmt[idx0 + 1 :]))
                xtract_rexp = "(.{" + sz + "})"  # r.e. for extraction
                leading_sp = " *"
                optional_sign = "-?"
                rexp0 = "\d+(\.\d+)?"
                rexp1 = leading_sp + optional_sign + rexp0  # r.e. for matching
                rexp = [(xtract_rexp, rexp1, divisor, "float")]
            else:
                raise For2PyError(
                    f"ERROR: Unrecognized format specifier {fmt}\n"
                )

        # replicate the regular expression by the repetition factor in the format
        rexp *= reps

        return rexp