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