Использование RegEx для замены недопустимых символов

21

У меня есть каталог с большим количеством папок, подпапок и все с файлами в них. Идея моего проекта состоит в том, чтобы переписать весь каталог, собрать все имена файлов и заменить недопустимые символы (недействительными для миграции SharePoint).

Тем не менее, я совершенно не знаком с регулярными выражениями. Символы, которые мне нужно удалить в именах файлов: ~, #, %, &, *, { } , \, /, :, <>, ?, -, | и "" Я хочу заменить эти символы пробелом. Я надеялся использовать метод string.replace() для просмотра всех этих имен файлов и замены.

До сих пор единственным кодом, который я получил, является рекурсия. Я думал о рекурсии, проверяющей диск, выбирая имена этих файлов и помещая их в List<string>.

Может кто-нибудь помочь мне с тем, как найти/заменить недопустимые символы RegEx с этими конкретными символами?

Теги:

2 ответа

39
Лучший ответ
string pattern = "[\\~#%&*{}/:<>?|\"-]";
string replacement = " ";

Regex regEx = new Regex(pattern);
string sanitized = Regex.Replace(regEx.Replace(input, replacement), @"\s+", " ");

Это заменит пробелы пробела и одним пробелом.

  • 2
    string pattern = "[\\~#%&*{}/:<>?|"-]"; лучше - меньше ненужных экранировок.
  • 0
    @Tim Спасибо, спасибо! Я буду редактировать свое решение. Большая часть моего опыта в регулярных выражениях находится в Perl, где я использую литералы регулярных выражений. Так что я не совсем уверен, что нужно экранировать, а что нет в C # или Java. Это в основном методом проб и ошибок.
Показать ещё 6 комментариев
7

Есть ли способ избавиться от лишних пробелов?

Попробуйте что-то вроде этого:

string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *";
string replacement = " ";

Regex regEx = new Regex(pattern);
string sanitized = regEx.Replace(input, replacement);

Рассмотрите возможность обучения немного о регулярных выражениях, так как это также очень полезно при разработке (например, поиск/замена в Visual Studio).

  • 0
    Кроме того, есть ли способ удалить любой посторонний '.' (точки) в имени файла? например: 0.0.0.1.doc Как бы я справился с этим без его уничтожения .doc?

Ещё вопросы

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