這裏的正則表達式模式:C#正則表達式匹配失敗
string testerpattern = @"\s+\d+:\s+\w\w\w\w\w\w\s+..:..:..:..:..:..:..:..\s+\d+.\d+.\d+.\d+\s+\d+.\d+.\d+.\d+\s+""\w +""";
下面是幾行文本我想匹配。在行的開頭會有一個或多個空格。當我得到它的工作,我會修改它進行命名匹配。基本上我希望大部分線路不需要爲每個模式在一條線路上進行多個匹配。
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);
}
}
會刪除'\ w'和'+'末雙引號內解決問題之間的空間? – dasblinkenlight
是的,就是這樣。我一直在盯着這個15分鐘試圖弄清楚。新的問題......其中一個輸入行可能在行結尾處的左手雙引號之前有一個「>」。我知道正則表達式匹配會是\?爲0或1,但我怎麼逃避,讓C#不認爲它是命名匹配的一部分?或者如果在比賽之前存在,用空白替換它會更容易嗎?我試過'\> \?'作爲一種逃避,這場比賽失敗了。 –
轉義單個字符的另一種方法是使用方括號,即'[>]?' – dasblinkenlight