code: def parse(cls, rule_description):
      """Parses a multiline rule description string
  
      Args:
          rule_description (str): The rule's description
  
      Return:
          dict: A dict mapping fields to lists of strings, each corresponding to a line belonging
                to that field. All field names are lowercase.
      """
      rule_description = (
          "" if not rule_description else rule_description
      )
      tokens = [
          line.strip() for line in rule_description.strip().split("\n")
      ]
  
      field_lines = {}
  
      current_field = "description"
      for token in tokens:
          if current_field not in field_lines:
              field_lines[current_field] = []
  
          if not token:
              # preserve an empty line
              field_lines[current_field].append("")
              continue
  
          # Python regex does not support possessive qualifiers, which means it not easy
          # to write a regex that detects for \s++(?:http:) because operator will attempt to
          # give up characters to the negative lookahead. So, we strip the line first before
          # doing the negative lookahead.
          match = cls._FIELD_REGEX.match(token)
  
          if match is not None:
              current_field = match.group("field").strip().lower()
              value = match.group("remainder").strip()
          else:
              value = token
  
          if current_field not in field_lines:
              field_lines[current_field] = []
          field_lines[current_field].append(value)
  
      return field_lines
  
imports: import re
label_desc: Use image node_id 1 for calling the RuleDescriptionParser obj's underlying member method code with example usage: obj.parse(cls, rule_description) and returns: field_lines