code: def visit_complex_value(self, node):
          
          if node.value.startswith(ComplexValue.EXACT_VALUE_TOKEN):
              value = node.value.strip(ComplexValue.EXACT_VALUE_TOKEN)
              return ExactMatchValue(value)
  
          elif node.value.startswith(ComplexValue.PARTIAL_VALUE_TOKEN):
              value = node.value.strip(ComplexValue.PARTIAL_VALUE_TOKEN)
              return PartialMatchValue(value, True if ast.GenericValue.WILDCARD_TOKEN in value else False)
  
          elif node.value.startswith(ComplexValue.REGEX_VALUE_TOKEN):
              return RegexValue(node.value.strip(ComplexValue.REGEX_VALUE_TOKEN))
          else:
              # Covering the case where ComplexValue supports more than ExactMatch, PartialMatch and Regex values.
              msg = self.__class__.__name__ + ': Unrecognized complex value'
              try:
                  msg += ' lookahead token: "' + node.value[0] + '"'
              except IndexError:
                  msg += ': \"' + repr(node.value) + '"'
              msg += '.\nUsing simple value instead: "' + node.value + '".'
              logger.warn(msg)
              return ast.Value(node.value)
docs: Convert :class:`ComplexValue` to one of ExactMatch, PartialMatch and Regex Value nodes.