docs: def get_filtered_dfs(lib, expr):
      """
      Main: Get all data frames that match the given expression
      :return dict: Filenames and data frames (filtered)
      """
      logger_dataframes.info("enter get_filtered_dfs")
  
      dfs = {}
      tt = None
  
      # Process all lipds files or one lipds file?
      specific_files = _check_expr_filename(expr)
  
      # Determine the table type wanted
      if "chron" in expr:
          tt = "chron"
      elif "paleo" in expr:
          tt = "paleo"
  
      # Get all filenames of target type.
      if tt:
  
          if specific_files:
              # The user has specified a single LiPD file to get data frames from.
              for file in specific_files:
                  if file in lib:
                      lo_meta = lib[file].get_metadata()
                      lo_dfs = lib[file].get_dfs()
  
                      # Only start a search if this lipds file has data frames available. Otherwise, pointless.
                      if lo_dfs:
                          # Get list of all matching filenames
                          filenames = _match_dfs_expr(lo_meta, expr, tt)
                          # Update our output data frames dictionary
                          dfs.update(_match_filenames_w_dfs(filenames, lo_dfs))
                  else:
                      print("Unable to find LiPD file in Library: {}".format(file))
  
          # Process all LiPD files in the library. A file has not been specified in the expression.
          else:
              # Loop once on each lipds object in the library
              for ln, lo in lib.items():
                  # Get the
                  lo_meta = lo.get_metadata()
                  lo_dfs = lo.get_dfs()
  
                  # Only start a search if this lipds file has data frames available. Otherwise, pointless.
                  if lo_dfs:
                      # Get list of all matching filenames
                      filenames = _match_dfs_expr(lo_meta, expr, tt)
                      # Update our output data frames dictionary
                      dfs.update(_match_filenames_w_dfs(filenames, lo_dfs))
  
      logger_dataframes.info("exit get_filtered_dfs")
      return dfs