2010-01-21 123 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

爲什麼你需要一個簡單的搜索和替換正則表達式? – 2010-01-21 08:44:44

+0

我不需要這樣。我剛剛在其他地方做過其他幾個正則表達式,只是編輯了一個複製粘貼,然後固執地想弄明白爲什麼它不起作用。 但是我剛剛嘗試了下面兩個來自S.Mark和ck的例子,它們都不適用於我。 關於多行文本框如何存儲關於CR的文本,有什麼不同嗎? – 9cents 2010-01-21 09:10:34

+0

FYI:萬一別人臨到這個問題,我發現,它有可能獲得VB.NET regexs接受\ r \ n和其他轉義字符,如果你正在使用VS2008(也許在別人是可能的,這正是我用的)。 轉到您的項目屬性並在參考選項卡上,在導入的名稱空間部分下的System.Text.RegularExpressions旁邊放置一個檢查。 – 9cents 2010-01-23 02:17:05

回答

4

其他人已經到你的問題提供了良好的解決方案。作爲一般性評論,我想解釋一下,VB.NET沒有像C#那樣的字符串轉義序列(\ n,\ r,\ t,...)。 String literals in VB.NETverbatim string literals in C#類似 - 唯一可以轉義的字符是雙引號(加倍)。

相反,你必須使用VB常數(例如vbCrLfvbTab)或.net常數(例如Environment.NewLine)和字符串連接("Hello World" & vbCrLf,而不是`的 「Hello World \ n」)。

+0

上述使用vb常量的解決方案對我來說並不適用,儘管我可以看到它們適用於其他人。 請您澄清一下,是因爲當文本框中的文本被分配給變量VB.NET時,退出回車? – 9cents 2010-01-21 09:24:37

+0

它不應該。你能看看調試器中的字符串嗎? (類似於'Console.Writeline(strInput)',然後查看Visual Studio中的「輸出」工具窗口) – Heinzi 2010-01-21 09:27:05

+0

我真是個笨蛋。我有另一段代碼堆早些時候被清洗出一串字符,它的抹的CR> _ < 也不會注意到的年齡,如果不是因爲你的建議,但!我可以給大家分嗎? <3 – 9cents 2010-01-21 09:43:40

5

如何正常strInput.Replace(vbCrLf,",<BR>")沒有正則表達式?

+0

完全是我的觀點!... – 2010-01-21 08:48:30

3

如何:

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