Я очень плохо знаком с RegEx - таким образом, кто-то может помочь мне выяснить то, что точно идет не так, как надо здесь?
У меня есть этот код:
string regPattern = "*[~#%&*{}/<>?|\"-]+*";
string replacement = "";
Regex regExPattern = new Regex(regPattern);
Все же, когда мое приложение поражает regExPattern строку, я получаю ArgumentException - Квантор {x, y} после ничего ошибка.
Кто-то может помочь?
Править: Я должен передать этот шаблон в цикл foreach как так:
if (paths.Contains(regPattern))
{
foreach (string files2 in paths)
{
try
{
string filenameOnly = Path.GetFileName(files2);
string pathOnly = Path.GetDirectoryName(files2);
string sanitizedFileName = regExPattern.Replace(filenameOnly, replacement);
string sanitized = Path.Combine(pathOnly, sanitizedFileName);
//write to streamwriter
System.IO.File.Move(files2, sanitized);
}
catch (Exception ex)
{
//write to streamwriter
}
}
}
else
{
//write to streamwriter
}
Как я определяю шаблон, если он передается в этот цикл?
Обновление: после прочтения комментария к вопросу, я думаю, вам нужно просто следующее:
s = Regex.Replace(s, "[~#%&*{}/<>?|\"-]+", "");
Старый ответ: я думаю, когда вы пишете *
вы думаете о подстановочных знаках, таких как те, которые вы вводите в оболочке:
*. Txt
Это не то, как *
работает в синтаксисе регулярных выражений. Вместо этого вы, вероятно, захотите . *
:
".*[~#%&*{}/<>?|\"-]+.*"
.
означает «любой символ», а *
означает «ноль или более предыдущего».
Внутри класса символов [...]
*
теряет свое особое значение и становится буквальным символом, поэтому его не нужно экранировать. Необоснованный экранирование внутри класса символов не причинит никакого вреда, и некоторым людям его легче читать.
*
- это квантор, означающий «ноль или более раз» (то же самое, что и {0,}
). Вам нужно будет избежать этого, используя обратную косую черту, например: \ *
Поскольку вы выполняете Regex.Replace для замены любого из этих односимвольных совпадений пустой строкой:
string pattern = "[~#%&*{}/()<>?|\"\\\\-^[\\]]";
string input = @"(*&af%\#$}afd]a#f%hjg{d(^(^[RF*()^FR(7r5";
string output = Regex.Replace(input, pattern, String.Empty);