Это потому, что вы ищете \n something \n
.То есть вы ищете два vbLf
, но перед первой строкой не будет перевода строки, и строки могут быть разделены vbCrLf
.Вы можете сопоставить начало строки с ^
и конец строки с $
.
Кроме того, я не уверен, каково ваше намерение.Поскольку RichTextBox1
содержит разделенный текст, т. Е. Текст, который больше не содержит шаблон поиска, как вы можете найти в нем этот текст с помощью deletion.Matches(RichTextBox1.Text)
?
Вы объявляете Regex
с именем Selection
но вы никогда не используете его как таковой.Вместо этого вы извлекаете шаблон с помощью 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\."