2017-02-02 5 views
0

Я хочу удалить некоторые символы из текстового поля. Он работает, но когда я пытаюсь заменить символ «[», он дает ошибку. Зачем?VB.NET - Regex.Replace error with [character

Return Regex.Replace(html, "[", "").Replace(",", " ").Replace("]", "").Replace(Chr(34), " ") 

error

Когда я удалить "[", "").Replace( часть это прекрасно работает?

Return Regex.Replace(html, ",", " ").Replace("]", "").Replace(Chr(34), " ") 
+0

Попробуйте 'Return Regex.Replace (HTML, "\ [", "") .Привернуть (" "" ") .Привернуть ("]" , "") .Replace (Chr (34), "") ' – SteelToe

+2

@SteelToe было бы неплохо объяснить, почему: потому что' '' имеет особое значение в регулярном выражении, он должен быть экранирован с обратным слэшем при буквальном поиске. – Aybe

+0

@SteelToe Спасибо за сообщение правильного кода! Теперь работает. Спасибо Aybe за объяснение! Interessting. Я нашел дополнительную информацию на [javascriptkit.com] (http://www.javascriptkit.com/javatutors/redev2.shtml). Еще раз спасибо :) – Jack

ответ

2

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

Поэтому это будет ваш правильный код регулярное выражение Return Regex.Replace(html, "\[", "").Replace(",", " ").Replace("]", "").Replace(Chr(34), " ")

1

Потому что [ является зарезервированным персонажем, который использует шаблоны регулярных выражений. Вы всегда должны избегать своих шаблонов поиска, используя Regex.Escape(). Это найдет все зарезервированные символы и удалит их с помощью обратного слэша.

Dim searchPattern = Regex.Escape("[") 
Return Regex.Replace(html, searchPattern, ""). 'etc... 

Но зачем вам все-таки использовать регулярное выражение? Вот лучший способ сделать это, я думаю, с помощью StringBuilder:

Dim sb = New StringBuilder(html) _ 
.Replace("[", "") _ 
.Replace(",", " ") _ 
.Replace("]", "") _ 
.Replace(Chr(34), " ") 
Return sb.ToString()