code: def _parse_name(self, name):
          
          if name is None:
              self.ifo = None
              self.tag = None
              self.version = None
          elif re_IFO_TAG_VERSION.match(name):
              match = re_IFO_TAG_VERSION.match(name).groupdict()
              self.ifo = match['ifo']
              self.tag = match['tag']
              self.version = int(match['version'])
          elif re_IFO_TAG.match(name):
              match = re_IFO_TAG.match(name).groupdict()
              self.ifo = match['ifo']
              self.tag = match['tag']
              self.version = None
          elif re_TAG_VERSION.match(name):
              match = re_TAG_VERSION.match(name).groupdict()
              self.ifo = None
              self.tag = match['tag']
              self.version = int(match['version'])
          else:
              raise ValueError("No flag name structure detected in '%s', flags "
                               "should be named as '{ifo}:{tag}:{version}'. "
                               "For arbitrary strings, use the "
                               "`DataQualityFlag.label` attribute" % name)
          return self.ifo, self.tag, self.version
docs: Internal method to parse a `string` name into constituent
          `ifo, `name` and `version` components.
  
          Parameters
          ----------
          name : `str`, `None`
              the full name of a `DataQualityFlag` to parse, e.g.
              ``'H1:DMT-SCIENCE:1'``, or `None` to set all components
              to `None`
  
          Returns
          -------
          (ifo, name, version)
              A tuple of component string parts
  
          Raises
          ------
          `ValueError`
              If the input ``name`` cannot be parsed into
              {ifo}:{tag}:{version} format.