2011-11-14 147 views
-1

我試圖建立其執行以下的應用程序:忽略在正則表達式表達大括號

1)寫一些文本在RichTextBox


2)當用戶點擊一個按鈕,該應用將用{}大括號中的另一個文本替換文本。

我想要的是,下一次,正則表達式搜索任何文本,它應該排除出現在{}中的文本。

爲如:

我的世界是世界的好和快樂的世界,將是每個人的更美好的世界。

第一關 - 改變字的「世界」

我{世界|快樂的地方|家}良好{世界|快樂的地方|家}和快樂{世界|快樂的地方|家居}和意志對每個人來說都是一個更好的{world | happy place | home}。

第二遍 - 改變單詞這一關我想正則表達式忽略它們由{}包圍所有實例「快樂」

。通知詞開心地出現在{world | happy place | home},但它不應該被觸動。

現在任何人都可以幫助我建立這個正則表達式嗎?

簡而言之,我想包括該詞並排除{}之間的所有內容。另請注意,這個詞可以是一個字符串。

例如:有時我可能想要替換字符串「幸福的地方」。

除正則表達式以外的其他邏輯也可以提供幫助。

我的代碼是:

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") 
+0

你最終的字符串應該是什麼? –

+0

這取決於要替換的列表中有多少單詞。它是動態的。但給出一個總體佈局,不應該有任何嵌套{} – xhammer

回答

0

您可以使用向前看符號和lookbehinds:

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

嘿petar謝謝你的答案,我會檢查它,但告訴我你知道vb.net嗎?我只是想知道我們是否可以用「(?<=(^ |})[^ {] *)」&strvar&「(?= [^}] *($ | {) )「 – xhammer

+0

也似乎有問題。我只想改變單詞 - 單個單詞。隨着目前的替代方法,這種情況正在發生:所以在軟件中被替換爲{so | why | so what}等等任何方法來避免這種情況? – xhammer

+0

@ user1045010只是對搜索到的單詞另外使用單詞邊界,就像這個'\ bhappy \ b',當然還有Petars的其他答案。 – stema