string pattern = ".+\\";
        foreach (string file in files){
            richTextBox2.Text += Regex.Replace(file, @pattern, String.Empty) +"\n";
        }

Я пытаюсь сделать то, что должно быть простым сопоставлением и заменой шаблона, файл состоит из полного пути, например: d:\test\t.txt. Но каждый раз он давит и говорит Illegal \ at the end of the pattern. Нет радости, где я ошибаюсь?

1
Disciples 3 Июл 2014 в 09:55

2 ответа

Лучший ответ

Необходимо экранировать обратную косую черту дважды :

string pattern = ".+\\\\";

Во-первых, вам нужно экранировать его на уровне обработки строк, чтобы "\\" превратился в \ для механизма регулярных выражений.

Во-вторых, механизм регулярных выражений также использует обратную косую черту для специальных escape-последовательностей, поэтому, если вы хотите сопоставить буквальную обратную косую черту с регулярным выражением, вам нужно использовать \\.

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

4
Tim Pietzcker 3 Июл 2014 в 09:57
2
Бинго! При выполнении регулярного выражения лучше использовать дословную строку, чтобы избежать путаницы. @".+\\"
 – 
Logarr
3 Июл 2014 в 09:58

Еще одно решение. Вы можете использовать @ перед строками, чтобы избежать необходимости экранировать специальные символы, такие как

string pattern = @".+\\";

ПРОВЕРИТЬ MSDN

3
Rahul 3 Июл 2014 в 10:04