2011-11-14 43 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