如何使用正则表达式替换有条件地删除文本块?

时间:2010-05-05 01:48:32

标签: asp.net regex

我想有条件地删除指定的开始和停止分隔符之间的文本块。下面的代码不起作用,但希望它足以说明我想要完成的任务。

            If dr("ReferralPoints") > 0 Then
                Dim objRegex As Regex = New Regex("[HASNOVALUE:REFERRALPOINTS](.*)[/HASNOVALUE:REFERRALPOINTS]", RegexOptions.IgnoreCase + RegexOptions.Singleline)
                Dim result As String = objRegex.Replace(strBody, "")
            End If

2 个答案:

答案 0 :(得分:3)

正则表达式必须如下:

\[HASNOVALUE:REFERRALPOINTS](.*)\[/HASNOVALUE:REFERRALPOINTS]

你需要在这里转义[,因为它是一个正则表达式元字符。

在VB.NET中,(based on this quick reference sheet)看起来\不是转义字符,所以你可以简单地写成:

"\[HASNOVALUE:REFERRALPOINTS](.*)\[/HASNOVALUE:REFERRALPOINTS]"

另见


此外,如果你不知道,(.*)是贪婪的,并且将采取最长的匹配。您可能需要(.*?),但这实际上取决于问题定义。

---AxxZ----AxxZ----
   ^^^^^^^^^^^^
      A(.*)Z

答案 1 :(得分:0)

你需要逃避方括号吗?在许多其他正则表达式语言中,方括号创建character class,这意味着引擎只需找到括号内的一个字符即可将其称为匹配。

如果你使用反斜杠'\'转义括号,这可能就足够了。不过,我会是第一个承认我不确定ASP.NET的人。