Как рассчитать эту строку с регулярным выражением? - PullRequest
0 голосов
/ 11 октября 2019
private static void ReceivedEventHandler(object sender, DataReceivedEventArgs e)
{
    if (e.Data != null)
    {
        string text = Regex.Replace(e.Data, "^\\s+$[\\r\\n]*", "", RegexOptions.Multiline);
        if (text.Contains("My Own String:"))
        {
            combinedOutput = Regex.Split(text, ":")[1].ToString().Trim();
            combinedAuth = true;
        }
        if (!(text == "") && !(text == Environment.NewLine) && !(text == " ") && text != null && !(text == "\r\n") && !(text == "\n"))
        {
            combinedError = text;
        }
    }
}

Этот код, полученный из программы, которая читает некоторые строки, например, текст строки содержит «1bc4bb7de4c58a7eba6b95b565b21a4b26b5528c2be242b96fe014bf7ff403ca», а затем заменяет / вычисляет строку с помощью регулярных выражений: ^ \ n + $ [^ \ s] $как код, который я положил выше. Я не могу понять это. Это выглядит довольно просто, но я не могу это сделать. Так если кто-нибудь, кто может понять этот код и помочь мне рассчитать ответ? Я полагаю, что ответ также будет 32 байта. Ура! * * 1002

1 Ответ

0 голосов
/ 12 октября 2019

Этот код выполняет обработку текста.


string text = Regex.Replace(e.Data, "^\\s+$[\\r\\n]*", "", RegexOptions.Multiline);

Этот первый сегмент кода используется для получения любого многострочного ввода, который он получает, и вырезания всех пустых строк, по сути, получения блока текста сбез разрывов между каждой строкой. Это оставляет начальные и конечные пробелы в каждой строке.

^\s+$[\r\n]* - это регулярное выражение, используемое для удаления пустых строк из входной строки.

  • ^\s+$ Соответствует строке, которая не содержит ничего, кроме пробелов
  • [\r\n]* Соответствует любому количеству символов новой строки или возвращаемых символов после этой пустой строки.

Второй фрагмент регулярного выражения необходим, потому что в противном случае пара новых строк между двумя строками ввода останется на месте. Обратите внимание, что подобный эффект может быть достигнут с помощью ^\s+$\s*

Демо


        if (text.Contains("My Own String:"))
        {
            combinedOutput = Regex.Split(text, ":")[1].ToString().Trim();
            combinedAuth = true;
        }

После того, как текст был уменьшен до одной строки, эти строкипроверяются, чтобы увидеть, начинаются ли они с фразы My Own String: - если они это делают, фраза удаляется через Regex.Split() путем разбивки на двоеточие. Результирующая строка затем обрезается для удаления начальных и конечных пробелов. Если текст НЕ начинался с My Own String:, любой начальный или конечный пробел остается без изменений.


        if (!(text == "") && !(text == Environment.NewLine) && !(text == " ") && text != null && !(text == "\r\n") && !(text == "\n"))
        {
            combinedError = text;
        }

Текст теперь проверяется. Если ...

  • !(text == "") Строка не пуста, и ...
  • !(text == Environment.NewLine) Строка не состоит только из новой строки (в Unix) илиперевод строки и возврат каретки (в Windows) и ...
  • !(text == " ") Строка не состоит только из пробела, а ...
  • text != null Строка не являетсяnull, и ...
  • !(text == "\r\n") Строка не состоит из возврата каретки и перевода строки, и ...
  • !(text == "\n") Текст не состоит исключительно изперевод строки ...

... затем combinedError устанавливается равным обработанной и проверенной строке. Я считаю, что этот сегмент кода может быть значительно реорганизован;проверка на null обычно является первым условным оператором, избегающим исключений NullPointerExceptions, а Environment.NewLine охватывает как \r\n, так и \n.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...