регулярное выражение - заменить все точки, специальные символы, кроме расширения файла - PullRequest
4 голосов
/ 19 января 2010

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

Помоги мне с регулярным выражением

Ответы [ 4 ]

6 голосов
/ 19 января 2010

попробуйте это:

([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))

с нечувствительным флагом «i». Заменить на '_'

Можно настроить первую партию символов или использовать \ W (любое не-слово)

так это читается как:

заменить на '_', где я соответствую, и этого набора, или точку, за которой не следуют некоторые символы или цифры и конец строки

Пример кода c #:

var newstr = new Regex("([!@#$%^&*()]|(?:[.](?![a-z0-9]+$)))", RegexOptions.IgnoreCase)
    .Replace(myPath, "_");
2 голосов
/ 19 января 2010

Поскольку вас интересует только расширение, забудьте об остальной части имени файла.Напишите регулярное выражение для удаления расширения, отбрасывая исходное имя файла, а затем приклейте это расширение к новому имени файла.

Это регулярное выражение будет соответствовать расширению, включая точку .: \.[^.]*$

1 голос
/ 19 января 2010

Как только вы отделите расширение файла от вашей строки, вы получите this , а затем получите остаток пути?

1 голос
/ 19 января 2010

Возможно, просто сначала снимите расширение, а потом снова включите его? Что-то вроде (но добавьте свой собственный список специальных символов):

static readonly Regex removeChars = new Regex("[-. ]", RegexOptions.Compiled);
static void Main() {
    string path = "ab c.-def.ghi";
    string ext = Path.GetExtension(path);
    path = Path.ChangeExtension(
        removeChars.Replace(Path.ChangeExtension(path, null), "_"), ext);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...