Я предлагаю сделать это в два прохода, первый, чтобы удалить точки и дефисы, второй, чтобы вставить дефисы. По сравнению с использованием одного регулярного выражения это проще и, как я ожидаю, не менее эффективно.
str = "890414.14.1422, 900515141092, 950616-12-5414"
str.delete('.-').
gsub(/\d+/) { |s| "%s-%s-%s" % [s[0,6], s[6,2], s[8..-1]] }
#=> "890414-14-1422, 900515-14-1092, 950616-12-5414"
, где
str.delete('.-')
#=> "890414141422, 900515141092, 950616125414"