2016-07-15 2 views
0

Мне нужно заменить в строковых выражениях типа "\ t" на символы '\ t'. Вот почему я использую Unescape.Как получить неправильный символ escape в строке?

 string source = "\t\t\\q\r\n"; 

     try 
     { 
      string result = Regex.Unescape(source); 
     } 
     catch (ArgumentException ex) 
     { 
      // Which one is wrong??? 
     } 

I случай Я сделал ошибку и поместил неправильный символ escape внутри строки Я получаю исключение ArgumentException.

Мой вопрос: Как я могу понять, какой символ плох? Мне нужен индекс? Каков наилучший способ сделать это?

+0

Действительно ли этот код действительно скомпилирован? – Fratyx

+0

@Fratyx: Нет, исходная строка поступает от пользователя. – walruz

+0

@Fratyx: Вы правы, я обновил свой вопрос. – walruz

ответ

1

Осмотрите переменную ArgumentExceptionex. Он скажет вам, какие избежать последовательности вызвал исключение в сообщении, подобный этому:

System.ArgumentException: разборе «\ т \ т \ д \ г \ п» - Непризнанный последовательность выхода \ Q.

Один из способов, которым вы можете обойти это, - проверить строку «источник», прежде чем пытаться ее отменить - существует конечное количество правильных escape-последовательностей, поэтому вы можете удалить недействительные. Из docs:

Символьные представления он заменяет являются \ а, \ Ь, \ е, \ п, \ г, \ е, \ т и \ v.

+0

Что делать, если пользователь имеет ОС на другом языке? Правильно ли это так? – walruz

+0

Хотя сообщение об исключении, мы надеемся, будет переведено на правильный язык, escape-последовательности должны быть одинаковыми независимо от языка ОС. Вы можете увидеть в [исходный код] (http://referencesource.microsoft.com/#System/regex/system/text/regularexpressions/RegexParser.cs,9247c4f54f140280), где он проверяет букву escape-последовательности ..., которая не работает Не меняйте, если язык ОС отличается. –

+0

Спасибо. Вот как я это делаю сейчас. Я просто надеялся, что есть и другие (довольно) способы сделать это. – walruz

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