docs: def parse_etags(value):
      """Parse an etag header.
  
      :param value: the tag header to parse
      :return: an :class:`~werkzeug.datastructures.ETags` object.
      """
      if not value:
          return ETags()
      strong = []
      weak = []
      end = len(value)
      pos = 0
      while pos < end:
          match = _etag_re.match(value, pos)
          if match is None:
              break
          is_weak, quoted, raw = match.groups()
          if raw == '*':
              return ETags(star_tag=True)
          elif quoted:
              raw = quoted
          if is_weak:
              weak.append(raw)
          else:
              strong.append(raw)
          pos = match.end()
      return ETags(strong, weak)