忽略正则表达式中的大括号

时间:2011-11-14 06:09:12

标签: regex vb.net visual-studio-2010 replace

我正在尝试构建一个执行以下操作的应用程序:

1)在richtextbox中写一些文字


2)当用户点击按钮时,该应用会将文字替换为{}括号中的其他文字。

我想要的是下一次,正则表达式搜索任何文本,它应该排除{}中存在的文本。

例如:

我的世界是美好的世界,是一个幸福的世界,对每个人来说都是一个更美好的世界。

第一次传递 - 更改“世界”一词

我的{world | happy place | home}是一个很好的{world | happy place | home}和一个快乐的{world | happy place | home},对每个人来说都是一个更好的{world | happy place | home}。< / p>

第二次传递 - 更改单词“happy”

在这个传递中,我希望正则表达式忽略被{}包围的所有实例。注意单词happy来自{world | happy place | home},但不应该被触及。

现在有人可以帮我构建这个正则表达式吗?

简单来说,我想要包含这个词,并排除介于{}之间的所有内容。另请注意,单词可以是一个字符串。

例如:有时我可能想要替换字符串“happy place”。

除了正则表达式之外的任何其他逻辑也可以提供帮助。

我的代码是:

Dim fil2 As New StreamReader("new2.txt")

    Dim i As Integer = 0
    Dim start2 As Integer = 0
    Dim rgx As Regex

    Dim rpl As String = RichTextBox1.Text

    Do While fil2.Peek > -1
        Dim StringToCheck As String = fil2.ReadLine()
        Dim prev As String = StringToCheck.Split("|")(0).Trim()

        If (StringToCheck.Split("|")(0).Split(" ").Count >= 2) Then
            Try
                rgx = New Regex("(?<=(^|})[^{]*)" & prev & "(?=[^}]*($|{))")
                Dim z As Integer = 0

                rpl = rgx.Replace(rpl, "{" & StringToCheck & "}")


            Catch ex As Exception

            End Try
        End If


    Loop

    fil2.Close()

    rpl = rpl.Replace("{?  ?|?  ?|? ! ?}", " ")
    RichTextBox1.Text = rpl
    MsgBox("done")

1 个答案:

答案 0 :(得分:0)

你可以使用lookaheads和lookbehinds:

"(?<=(^|})[^{]*)happy(?=[^}]*($|{))"