检查消息是否存在返回 - 正则表达式

时间:2011-02-25 17:36:26

标签: c# regex

我有这样的正则表达式:

“错误1 |错误2 |错误3 |错误4 |错误5” 大约80(可能更多)错误的错误消息

现在我检查我的文本中是否存在错误消息:

Regex errorRegex = new Regex("error 1|error 2|error 3|error 4|error 5");
if (errorRegex.Match(content).Success)
          return "ERROR";

但现在我需要返回哪些消息在内容中,例如“错误4”我可以在一场比赛中执行此操作吗?这样做的最佳方法(针对性能进行了优化)是什么?

3 个答案:

答案 0 :(得分:1)

通过保留Match类型的临时变量来尝试此操作:

Regex errorRegex = new Regex("error 1|error 2|error 3|error 4|error 5");
Match match = errorRegex.Match(content);
if (match.Success)
          return match.Value;

答案 1 :(得分:1)

首先,如果存在标准错误消息输出,则可以大大简化正则表达式语句:

Regex errorRegex = new Regex("error ([0-5]{1-2}).*");

您的错误消息应如下所示,例如“错误42:blah blah”。

然后,错误消息很容易解析其编号。

然后只有错误编号的案例条件。

大括号内的值将在组1中,并且是0到5之间的数字。 检查匹配项,如果找到匹配项,则提取组:

MatchCollection MatchList = errorRegex.Matches(content);
Match firstMatch = MatchList[0];
int errNum;
if(firstMatch && firstMatch.Groups[0] && firstMatch.Groups[1]){
    errNum = (int)firstMatch.Groups[1];
}

否则,如果您正在解析其他人的错误消息,那么只需返回您从函数中找到的消息,并编写一个switch语句来处理每个错误代码,如下所示:

void ErrorFunction(string content){
    [...]
    Regex errorRegex = new Regex("error 1|error 2|error 3|error 4|error 5");
    Match rMatch = errorRegex.Match(content);
    if (rMatch.Success)
              return rMatch.Value;
}

然后在其他地方:

switch(ErrorFunction(content)){
    case "error 1":
        DoSomething();
        break;
    case "error 2":
        DoSomething();
        break;
    case "error 3":
    case "error 4":
    case "error 5":
        DoSomething();
        break;
    default:
        DoSomething();
        break;
}

答案 2 :(得分:0)

为什么不首先检查是否存在error 4,然后返回?

听起来你正试图过早地优化你的代码。你有没有想过它?

如果有的话,将更复杂的检查放入正则表达式会使事情变得更加缓慢。保持代码和逻辑简单,然后运行分析。