s.gsub(/(|.+?《.+?》)(?!|)/){"|%s《%s》" % $1.scan(/|(.+?)《(.+?)》/).transpose}

正規表現であまり悩みたくない人向け

>>312
gsub の第 2 引数は使うなとお達しが来てるはずだが