You can FILTER for data. Try:
%title% HAS "!"
If you want to filter for all those that have an exclamation mark without blank in front of it:
%title% HAS "!" AND NOT %title% HAS " !"
For the replace action:
Do not mix a palin "Replace" with "Replace with regular expression". In the latter, the ! has a special meaning.
So: create an action of the type "Replace" for TITLE
Search string: !
Replace string: _!
(where the _ is actually the blank).
Just a personal remark: according to typing rules (there is an ISO standard for that) any punctuation is never preceeded by a blank. So it could be that with the replace action you leave the holy grounds of standardization.