code: def parse_doc(doc):
      
      if doc is None:
          return {}
  
      out = {}
  
      sections = re.split(r'(\w+)\n\s+-{4,50}', doc)  # obj.__doc__.split('\n\n')
      intro = sections.pop(0)
      if intro:
          content = list(map(str.strip, intro.strip().split('\n\n')))
          if len(content) == 1:
              out['title'] = content[0]
          elif len(content) == 2:
              out['title'], out['abstract'] = content
  
      for i in range(0, len(sections), 2):
          header, content = sections[i:i + 2]
  
          if header in ['Notes', 'References']:
              out[header.lower()] = content.replace('\n    ', '\n')
          elif header == 'Parameters':
              pass
          elif header == 'Returns':
              match = re.search(r'xarray\.DataArray\s*(.*)', content)
              if match:
                  out['long_name'] = match.groups()[0]
  
      return out
docs: Crude regex parsing.