считая строку со специальными символами в строке в c# - PullRequest
1 голос
/ 29 апреля 2020

Я хотел бы посчитать строку (поисковый запрос) в другой строке (лог-файл). Разделение строки с помощью метода Split и последующий поиск в массиве для меня слишком неэффективны, поскольку файл журнала очень большой.

В net я обнаружил следующую возможность, которая сработала пока неплохо. Тем не менее,

count = Regex.Matches(_editor.Text, txtLookFor.Text, RegexOptions.IgnoreCase).Count;

Теперь я сталкиваюсь с другой проблемой: возникает ошибка при подсчете строки в формате «Nachricht erhalten (».

Сообщение об ошибке:

System.ArgumentException: "Nachricht erhalten (" проанализировано - недостаточно) - символы.

1 Ответ

2 голосов
/ 29 апреля 2020

Вам необходимо экранировать символ (, поскольку он имеет специальную функцию в регулярных выражениях:

var test = Regex.Matches("Nachricht erhalten (3)", @"Nachricht erhalten \(", RegexOptions.IgnoreCase).Count;

Если вы делаете это с помощью пользовательского ввода, когда пользователь не знаком с регулярными выражениями вам, вероятно, легче использовать IndexOf в while l oop, где вы продолжаете использовать новый индекс, найденный в последнем l oop. Что также может быть немного лучше по производительности, чем регулярное выражение. Пример:

var test = "This is a test";
var searchFor = "is";
var count = 0;
var index = test.IndexOf(searchFor, 0);
while (index != -1)
{
    ++count;
    index = test.IndexOf(searchFor, index + searchFor.Length);
} 
...