Как использовать Regex.Replace, чтобы заменить две строки одновременно?

2

У меня есть следующий метод, который заменяет знак "фунт" из имени файла, но я также хочу иметь возможность заменить "одиночный апостроф" одновременно. Как мне это сделать? Это значение filename = Provider license_A'R_Ab # acus Settlements_1-11-09.xls

static string removeBadCharPound(string filename)
{            // Replace invalid characters with "_" char.            
    //I want something like this but is NOT working 
    //return Regex.Replace(filename, "# ' ", "_");
    return Regex.Replace(filename, "#", "_");
 }
Теги:
replace

2 ответа

18
Лучший ответ

Try

return Regex.Replace(filename, "[#']", "_");

Помните, я не уверен, что регулярное выражение, скорее всего, будет быстрее, чем несколько проще:

return filename.Replace('#', '_')
               .Replace('\'', '_');
  • 2
    Это должно быть быстрее, так как вы компилируете в регулярные выражения во втором примере и анализируете строку (как минимум) дважды (не говоря уже о дополнительном экземпляре строки и накладных расходах на его копирование)
  • 10
    Протестировано на моей машине, 100 000 итераций, RegEx заняло 677 мс, Замена заняла 143 мс.
Показать ещё 4 комментария
7

И просто для удовольствия, вы можете сделать то же самое с LINQ:

var result = from c in fileName
             select (c == '\'' || c == '#') ? '_' : c;
return new string(result.ToArray());

Или, сжатый в сексуальный однострочный:

return new string(fileName.Select(c => c == '\'' || c == '#' ? '_' : c).ToArray())

Ещё вопросы

Сообщество Overcoder
Наверх
Меню