这是正则表达式模式:
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);
}
}
答案 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