我写了一些代码,用户将在文本框中输入单词或句子,单击一个按钮,然后在富文本框中搜索文本,如果找到则删除搜索的文本。这样可行。 还应该发生的是,将弹出一个消息框,提示“短语已被删除X次”。我遇到的问题是,只有找到了多次,这才起作用。如果发现一次,则我的程序似乎将其视为被发现0次。 下面的代码,任何帮助将不胜感激-
Try
Dim Selection As New Regex(TextBox1.Text)
Dim deletion As New Regex("\n" & Selection.ToString & "\n")
Dim Stripped As String = Regex.Replace(RichTextBox1.Text, deletion.ToString, vbCr, RegexOptions.Multiline)
RichTextBox1.Clear()
RichTextBox1.AppendText(Stripped)
Dim matchcount = deletion.Matches(RichTextBox1.Text).Count
If matchcount > 0 Then
MsgBox("'" & Selection.ToString & "'" & " has been deleted " & matchcount.ToString & " times.")
Else
MsgBox("'" & Selection.ToString & "'" & " has not been found on a line on its own.")
End If
答案 0 :(得分:0)
这是因为您正在搜索vbLf
。也就是说,您正在寻找两个vbCrLf
,但是第一行将不会以换行符开头,并且行之间可能会以^
隔开。您可以将行首与$
匹配,并将行尾与RichTextBox1
匹配。
此外,我不确定您的意图是什么。由于deletion.Matches(RichTextBox1.Text)
包含剥离的文本,即不再包含搜索模式的文本,因此如何使用Regex
在其中查找该文本?
您要声明一个名为Selection
的{{1}},但是您永远不会这样使用它。取而代之的是,您使用Selection.ToString
提取模式,这当然与您输入的TextBox1.Text
完全相同。
在替换之前,您应该之前对匹配进行计数。另外,您必须使用相同的选项进行计数和替换
Dim deletion As New Regex("^" & TextBox1.Text & "$", RegexOptions.Multiline)
Dim matchcount = deletion.Matches(RichTextBox1.Text).Count
RichTextBox1.Text = deletion.Replace(RichTextBox1.Text, vbCrLf)
如果TextBox1.Text
应该包含一个正则表达式模式,则可以像这样创建Regex对象;但是,如果应该包含纯文本,则必须对其进行转义。
Dim deletion As New Regex("^" & Regex.Escape(TextBox1.Text) & "$",
RegexOptions.Multiline)
否则,特殊的正则表达式字符将发挥作用,而不是被视为纯文本。例子
Regex.Escape("This is a sentence.") ---> "This is a sentence\."