>>432の正規表現が期待通りに動かないのは、後ろの( |\.)が
次の単語の前の空白を消費してるから
先読みが使えそうだけど他にもいろいろ条件がありそうだなあ
str.gsub!(/\b#{capitalizeRegex}(?=[\s\.\?!])/io){

英語の形態素解析ライブラリとか使ったらいいんでね?