Some of these things can be done already via file groups, etc. but here are some easy things to use:

(defun search-buffers (str)
  (interactive "sregex:")
         (goto-char 0)
              (dosearch (lambda  () (if (re-search-forward str nil t)
                                        (progn (setq pt (point))
                                               (setq buf i)
                                      (case (read-char "(c)ontinue (q)uit (n)ext buffer:")
                                        (?n nil)
                                        (?q (error "done."))
                                        (t (funcall dosearch)))))))
           (funcall dosearch))))
    (if pt
          (switch-to-buffer buf)
          (goto-char pt))

Kill buffers whose names match a pattern, useful with BuffernameTags

(defun kill-buffers (regex)
  "kill all buffers matching some predicate"
  (interactive "sregex:")
   (if (and (buffer-file-name) (string-match regex (buffer-file-name)))
         (kill-buffer (current-buffer))))))