code: def extract_headings_from_history(history_lines):
      
      pattern = re.compile(r"""
      (?P<version>.+)  # Version string
      \(               # Opening (
      (?P<date>.+)     # Date
      \)               # Closing )
      \W*$             # Possible whitespace at end of line.
      """, re.VERBOSE)
      alt_pattern = re.compile(r"""
      ^                # Start of line
      (?P<version>.+)  # Version string
      \ [-~]\          # space dash/twiggle space
      (?P<date>.+)     # Date
      \W*$             # Possible whitespace at end of line.
      """, re.VERBOSE)
      headings = []
      line_number = 0
      for line in history_lines:
          match = pattern.search(line)
          alt_match = alt_pattern.search(line)
          if match:
              result = {'line': line_number,
                        'version': match.group('version').strip(),
                        'date': match.group('date'.strip())}
              headings.append(result)
              logger.debug("Found heading: %r", result)
          if alt_match:
              result = {'line': line_number,
                        'version': alt_match.group('version').strip(),
                        'date': alt_match.group('date'.strip())}
              headings.append(result)
              logger.debug("Found alternative heading: %r", result)
          line_number += 1
      return headings
docs: Return list of dicts with version-like headers.
  
      We check for patterns like '2.10 (unreleased)', so with either
      'unreleased' or a date between parenthesis as that's the format we're
      using. Just fix up your first heading and you should be set.
  
      As an alternative, we support an alternative format used by some
      zope/plone paster templates: '2.10 - unreleased' or '2.10 ~ unreleased'
  
      Note that new headers that zest.releaser sets are in our preferred
      form (so 'version (date)').