def structure(cls):
        # type: () -> Text
        """Get the part structure, as a DNA regex pattern.

        The structure of most parts can be obtained automatically from the
        part signature and the restriction enzyme used in the Golden Gate
        assembly.

        Warning:
            If overloading this method, the returned pattern must include 3
            capture groups to capture the following features:

            1. The upstream (5') overhang sequence
            2. The vector placeholder sequence
            3. The downstream (3') overhang sequence

        """

        if cls.signature is NotImplemented:
            raise NotImplementedError("no signature defined")

        up = cls.cutter.elucidate()
        down = str(Seq(up).reverse_complement())
        ovhg = cls.cutter.ovhgseq
        upsig, downsig = cls.signature

        if cls.cutter.is_5overhang():
            upsite = "^{}_".format(ovhg)
            downsite = "_{}^".format(Seq(ovhg).reverse_complement())
        else:
            upsite = "_{}^".format(ovhg)
            downsite = "^{}_".format(Seq(ovhg).reverse_complement())

        if issubclass(cls, AbstractModule):
            return "".join(
                [
                    up.replace(upsite, "({})(".format(upsig)),
                    "N*",
                    down.replace(downsite, ")({})".format(downsig)),
                ]
            )
        elif issubclass(cls, AbstractVector):
            return "".join(
                [
                    down.replace(downsite, "({})(".format(downsig)),
                    "N*",
                    up.replace(upsite, ")({})".format(upsig)),
                ]
            )
        else:
            raise RuntimeError("Part must be either a module or a vector!")
Get the part structure, as a DNA regex pattern.

        The structure of most parts can be obtained automatically from the
        part signature and the restriction enzyme used in the Golden Gate
        assembly.

        Warning:
            If overloading this method, the returned pattern must include 3
            capture groups to capture the following features:

            1. The upstream (5') overhang sequence
            2. The vector placeholder sequence
            3. The downstream (3') overhang sequence