C#正则表达式匹配失败

时间:2016-09-15 01:13:27

标签: c# regex

这是正则表达式模式:

string testerpattern = @"\s+\d+:\s+\w\w\w\w\w\w\s+..:..:..:..:..:..:..:..\s+\d+.\d+.\d+.\d+\s+\d+.\d+.\d+.\d+\s+""\w +""";

这里有一些我要匹配的文字行。在行的开头会有1个或多个空格。当我开始工作时,我会修改它以进行命名匹配。基本上我想要大部分线,而不是为每个模式在一行上做多个匹配。

 2: fffc02 10:00:00:05:1e:36:5f:82 172.31.3.93     0.0.0.0         "SAN002A"
 3: fffc03 10:00:00:05:1e:e2:a7:00 172.31.3.168    0.0.0.0         "SAN003A"
 4: fffc04 50:00:51:e8:cc:2f:ae:01 0.0.0.0         0.0.0.0         "fcr_fd_4"

这里是我写的用来做匹配的静态类。它在我的程序的其他地方工作,所以我假设它是一个问题的模式。模式在Regexr.com上成功匹配

public static class RegexExtensions
{
    public static bool TryMatch(out Match match, string input, string pattern)
    {
        match = Regex.Match(input, pattern);
        return (match.Success);
    }

    public static bool TryMatch(out MatchCollection match, string input, string pattern)
    {
        match = Regex.Matches(input, pattern);
        return (match.Count > 0);
    }
}

1 个答案:

答案 0 :(得分:0)

首先,如果您打算匹配一个或多个单词字符,请务必删除\w+之间的空格。

接下来,如果您需要匹配文字点,则必须将其转义 - \.,或者放入字符类 - [.]

此外,如果您不需要捕获,您可以使用限制量词来缩短模式。了解如何编写模式:

string pat = @"\s+\d+:\s+\w{6}\s+(?:..:){7}..(?:\s+\d+(?:\.\d+){3}){2}\s+""\w+""";

请参阅regex demo(其中\w{6}匹配6个字“字符,(?:..:){7}匹配除了新行后跟:等2个字符的7个序列,等等。 )

如果你需要捕获,你仍然可以使用我上面概述的想法:

\s+(\d+):\s+(\w{6})\s+(..(?::..){3}):((?:..:){3}..)\s+(\d+(?:\.\d+){3})\s+(\d+(?:\.\d+){3})\s+"(\w+)"

请参阅regex demo

enter image description here