Gsub specific characters but not all of them in value

You'll have to use a ruby filter for that. Something similar to

ruby {
  code => "
    event.to_hash.each { |k, v|
      event[k] = v.to_f if k.start_with? 'metric-'
    }
  "
}

should work.