首页 > 解决方案 > 如何用正则表达式计算这个字符串?

问题描述

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”,然后它用正则表达式替换/计算字符串:^\s+$[\r\n]* 就像我上面放的代码. 我似乎无法理解。这看起来很简单,但我做不到。那么,如果有人能理解这段代码并帮助我计算响应?我想响应也将是 32 个字节。干杯!

标签: c#regex

解决方案


此代码正在执行文本处理。


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设置为等于已处理和检查的字符串。我相信这段代码可以进行重大重构;检查 fornull通常是避免 NullPointerExceptions 的第一个条件语句,并且Environment.NewLine涵盖\r\n\n


推荐阅读