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

У меня есть следующий метод, который заменяет «фунт» подписать имя файла, но я также хочу иметь возможность заменить «одиночный апостроф»; & Quot; в то же время. Как мне это сделать? Это значение имени файла = Поставщик 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, "#", "_");
 }

Ответы на вопрос(2)

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())
Решение Вопроса

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

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

return filename.Replace('#', '_')
               .Replace('\'', '_');
 25 июн. 2009 г., 16:54
Это должно быть быстрее, так как вы компилируете для регулярного выражения во втором примере и анализируете строку (как минимум) дважды (не говоря уже о дополнительном экземпляре строки и накладных расходах на его копирование)
 25 июн. 2009 г., 17:54
(Другой альтернативой является использование скомпилированного регулярного выраженияonce и хранится в статической переменной. Я все же обычно предпочитаю версию String.Replace для простоты.)
 25 июн. 2009 г., 17:12
Протестировано на моей машине, 100 000 итераций, RegEx заняло 677 мс, Замена заняла 143 мс.
 25 июн. 2009 г., 17:53
@Blindy: Что заставляет вас думать, что во втором примере вообще используются регулярные выражения?
 25 июн. 2009 г., 23:59
Я также обнаружил, что, если вы можете сделать это без регулярного выражения достаточно легко, это неизменно лучше сделать.

Ваш ответ на вопрос