RegEx - Quantifier {x, y} после ошибки ничего - PullRequest
6 голосов
/ 28 июня 2010

Я очень новичок в RegEx - так может кто-нибудь, пожалуйста, помогите мне выяснить, что именно здесь происходит не так?

У меня есть этот код:

       string regPattern = "*[~#%&*{}/<>?|\"-]+*";
       string replacement = "";
       Regex regExPattern = new Regex(regPattern);

Еще, когда мойприложение попадает в строку regExPattern, я получаю ArgumentException - Quantifier {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

        }

Как определить шаблон, если он передается в этот цикл?

Ответы [ 4 ]

6 голосов
/ 28 июня 2010

Обновление: после прочтения комментария к вопросу, я думаю, что вы просто хотите:

s = Regex.Replace(s, "[~#%&*{}/<>?|\"-]+", "");

Старый ответ: я думаю, когда вы пишете *, вы думаете о подстановочных знаках, таких каквы должны ввести в оболочке:

*. txt

Это не то, как * работает в синтаксисе регулярных выражений.Вместо этого вы, вероятно, захотите: .*:

".*[~#%&*{}/<>?|\"-]+.*"

. означает «любой символ», а * означает «ноль или более от предыдущего».

Внутрикласс символов [...] * теряет свое особое значение и становится буквальным символом, поэтому его не нужно экранировать.Необязательный выход из класса персонажа не причинит никакого вреда, и некоторым людям легче читать.

1 голос
/ 28 июня 2010

* - это квантификатор, означающий «ноль или более раз» (аналогично {0,}). Вам придется избежать его с помощью обратной косой черты, например: \*

0 голосов
/ 03 июня 2014

Добавить . перед *

например string regPattern = ".*[~#%&*{}/<>?|\"-]+.*";

0 голосов
/ 29 июня 2010

Поскольку вы выполняете Regex.Replace, чтобы заменить любое из этих односимвольных совпадений пустой строкой:

        string pattern = "[~#%&*{}/()<>?|\"\\\\-^[\\]]";

        string input = @"(*&af%\#$}afd]a#f%hjg{d(^(^[RF*()^FR(7r5";

        string output = Regex.Replace(input, pattern, String.Empty);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...