игнорировать фигурные скобки в выражении регулярного выражения - PullRequest
0 голосов
/ 14 ноября 2011

Я пытаюсь создать приложение, которое выполняет следующие действия:

1) пишет текст в поле richtextbox


2), когда пользователь нажимает кнопку, приложение заменяеттекст с другим текстом в {} фигурных скобках.

я хочу, чтобы в следующий раз регулярное выражение выполняло поиск любого текста, который должен исключать те, которые присутствуют в {}.

например:

мой мир - это хороший мир и счастливый мир, и он станет лучшим для всех.

первый проход - измените слово "мир"

мой {мир | счастливое место | дом} хорош {мир | счастливое место | дом} и счастливый {мир | счастливое место | дом} и будет лучше {мир | счастливое место | дом}для всех.

второй проход - в этом проходе измените слово "счастливый"

. Я хочу, чтобы регулярное выражение игнорировало все экземпляры, окруженные {}.В {world | happy place | home} появляется слово «happy», но его не следует трогать.

теперь может кто-нибудь помочь мне с построением этого регулярного выражения?

Проще говоря, я хочу включить слово и исключить все, что попадает между {}.Также обратите внимание, что слово может быть строкой.

, например, для: иногда я мог бы захотеть заменить строку «счастливое место».

любая другая логика, кроме регулярных выражений, также может помочь.

мой код:

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 голосов
/ 14 ноября 2011

Вы можете использовать lookaheads и lookbehinds:

"(?<=(^|})[^{]*)happy(?=[^}]*($|{))"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...