public String migrate(String formattedString, String toBeFormattedString, Pattern format) {
   if (Strings.isEmpty(toBeFormattedString) || Strings.isEmpty(formattedString))
     return toBeFormattedString;
   FormattedString formatted = createFormattedString(formattedString, format);
   FormattedString toBeFormatted = createFormattedString(toBeFormattedString, format);
   if (formatted.semantic.equals(toBeFormatted.semantic)) return formattedString;
   List<Mapping> mappings = Lists.newArrayList();
   List<Region> remainingRegions = Lists.newArrayList();
   findLinearMatches(formatted, toBeFormatted, mappings, remainingRegions);
   for (Mapping m : mappings) toBeFormatted.migrateFrom(formatted, m);
   return toBeFormatted.toString();
 }