code: def _GetParserFilters(cls, parser_filter_expression):
      
      if not parser_filter_expression:
        return {}, {}
  
      includes = {}
      excludes = {}
  
      preset_names = cls._presets.GetNames()
  
      for parser_filter in parser_filter_expression.split(','):
        parser_filter = parser_filter.strip()
        if not parser_filter:
          continue
  
        if parser_filter.startswith('!'):
          parser_filter = parser_filter[1:]
          active_dict = excludes
        else:
          active_dict = includes
  
        parser_filter = parser_filter.lower()
        if parser_filter in preset_names:
          for parser_in_category in cls._GetParsersFromPresetCategory(
              parser_filter):
            parser, _, plugin = parser_in_category.partition('/')
            active_dict.setdefault(parser, [])
            if plugin:
              active_dict[parser].append(plugin)
  
        else:
          parser, _, plugin = parser_filter.partition('/')
          active_dict.setdefault(parser, [])
          if plugin:
            active_dict[parser].append(plugin)
  
      cls._ReduceParserFilters(includes, excludes)
      return includes, excludes
docs: Retrieves the parsers and plugins to include and exclude.
  
      Takes a comma separated string and splits it up into two dictionaries,
      of parsers and plugins to include and to exclude from selection. If a
      particular filter is prepended with an exclamation point it will be
      added to the exclude section, otherwise in the include.
  
      Args:
        parser_filter_expression (str): parser filter expression, where None
            represents all parsers and plugins.
  
      Returns:
        tuple: containing:
  
          * dict[str, BaseParser]: included parsers and plugins by name.
          * dict[str, BaseParser]: excluded parsers and plugins by name.