2010-01-21 5 views
1

Я пытаюсь заменить все символы возврата каретки в строке, полученной из многострочного текстового поля в форме Windows со строкой ", <BR>", так что когда я используйте строку в некотором HTML, она отображается правильно.VB.NET: регулярное выражение, необходимое для замены символа возврата другой строкой

Function Blah(ByVal strInput As String) As String 
    Dim rexCR As Object 
    rexCR = CreateObject("VBScript.RegExp") 
    rexCR.Pattern = "\r" 
    rexCR.Global = True 
    Blah = rexCR.Replace(strInput, ",<BR>") 
End Function 

попытался найти какой-либо из следующих символов и до сих пор не повезло:
\r|\n|\r\c|\cM|\x0d

Проблема, кажется, функция/выражение не обнаруживает каких-либо возврата каретки в тексте, и я понятия не имею, почему ? Я знаю, что функция работает, так как я могу поставить другое выражение в качестве теста, и это нормально

Любые идеи?

+0

Зачем вам регулярное выражение для простого поиска и замены? –

+0

Мне это не нужно. Я только что сделал пару в другом месте другого Regex и просто редактируя копию пасты, а затем упорно хотел понять, почему он не работает. Однако я только что попробовал оба примера из S.Mark и ck, и ни один из них не работает для меня. Есть ли что-то другое в том, как многострочное текстовое поле хранит текст в отношении CR? – 9cents

+0

FYI: Если кто-то еще сталкивается с этим вопросом, я обнаружил, что можно использовать регулярные выражения VB.NET для принятия \ r \ n и других экранированных символов, если вы используете VS2008 (возможно, в других случаях это это то, что я использую). Перейдите к свойствам ваших проектов и на вкладке ссылок, поставьте галочку рядом с System.Text.RegularExpressions в разделе Imported namespaces. – 9cents

ответ

4

Другие уже дали хорошие решения вашей проблемы. В качестве общего замечания я хотел бы объяснить, что VB.NET не имеет строк escape-последовательностей (\ n, \ r, \ t, ...), подобных C#. String literals in VB.NET похожи на verbatim string literals in C# - единственным символом, который может быть экранирован, является двойная кавычка (путем удвоения).

Вместо этого, вы должны использовать константы VB (например, vbCrLf, vbTab) или .net константы (например, Environment.NewLine) и конкатенации ("Hello World" & vbCrLf вместо ` "Hello World \ п").

+0

Решения выше, используя константы vb, не работали для меня, хотя я вижу, что они будут для других. Можете ли вы прояснить это, потому что, когда текст в текстовом поле присваивается переменной VB.NET, исключает возврат каретки? – 9cents

+0

Не следует. Можете ли вы посмотреть на строку в отладчике? (Что-то вроде 'Console.Writeline (strInput)', а затем смотри окно инструмента «Выход» в Visual Studio) – Heinzi

+0

Я такой идиот. Раньше у меня был кусок кода, который очищает кучу символов, и он вытирает CRs> _ < Не заметил бы на века, если бы не предложение! Могу ли я дать все баллы? <3 – 9cents

5

Как насчет нормального strInput.Replace(vbCrLf,",<BR>") без регулярного выражения?

+0

точно моя точка! ... –

3

Как насчет:

Function Blah(ByVal strInput As String) As String 
    return strInput.Replace(Environment.NewLine, "<br />") 
End Function