def _parse_dot_notation(self, attribute_mapping: str) -> Tuple[str, Optional[str], Optional[str]]:
        """Parses a string in the format of 'attribute.type.parameter' into its attribute parts parts using regex."""

        available_attributes = list(self._schema.keys()) + ["id"]
        available_parameters = ParameterType.values()
        available_types = AttributeType.values()

        # The pattern is in the format of 'attribute[.type[.parameter]]' where type and parameter are optional.
        pattern = re.compile(
            rf"^({'|'.join(available_attributes)})"
            rf"(?:\.({'|'.join(available_types)}))?"
            rf"(?:\.({'|'.join(available_parameters)}))?$"
        )

        match = pattern.match(attribute_mapping)
        if not match:
            raise ValueError(
                f"Invalid attribute mapping format: {attribute_mapping}. "
                "Attribute mapping must be in the format of 'attribute[.type[.parameter]]'."
                f"Available attributes: {available_attributes}, types: {available_types}, parameters: {available_parameters}."
            )
        attr_name, type_, parameter = match.groups()
        return attr_name, type_, parameter
Parses a string in the format of 'attribute.type.parameter' into its attribute parts parts using regex.
argilla/src/argilla/records/_mapping/_mapper.py