2014-07-03 2 views
1
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. Без радости, где я иду не так?Regex.Replace не работает правильно

ответ

3

Вам нужно обратный слеш дважды:

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

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

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

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

+0

Yeap, отлично теперь работает, спасибо! – Disciples

+2

Бинго! При выполнении регулярного выражения лучше всего использовать стенографическую строку для уменьшения путаницы. @ "+ \\" – Logarr

2

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

string pattern = @".+\\"; 

CHECK MSDN

Смежные вопросы