code: def replace(self, obj, value, recursive=True):
          
          if isinstance(obj, (Node, Wikicode)):
              context, index = self._do_strong_search(obj, recursive)
              for i in range(index.start, index.stop):
                  context.nodes.pop(index.start)
              context.insert(index.start, value)
          else:
              for exact, context, index in self._do_weak_search(obj, recursive):
                  if exact:
                      for i in range(index.start, index.stop):
                          context.nodes.pop(index.start)
                      context.insert(index.start, value)
                  else:
                      self._slice_replace(context, index, str(obj), str(value))
docs: Replace *obj* with *value*.
  
          *obj* can be either a string, a :class:`.Node`, or another
          :class:`.Wikicode` object (as created by :meth:`get_sections`, for
          example). If *obj* is a string, we will operate on all instances of
          that string within the code, otherwise only on the specific instance
          given. *value* can be anything parsable by :func:`.parse_anything`.
          If *recursive* is ``True``, we will try to find *obj* within our child
          nodes even if it is not a direct descendant of this :class:`.Wikicode`
          object. If *obj* is not found, :exc:`ValueError` is raised.