C# 从字符串中提取MAC地址

C# 从字符串中提取MAC地址,c#,C#,我有这样的字符串:00:1E:AE:4F:20:0BDntl3l 我想使用正则表达式从字符串中提取00:1E:AE:4F:20:0B的mac地址,并丢弃Dntl3l。如何在c中实现这一点 我已经尝试了下面的代码,但它仍然返回相同的字符串 string s = "00:1E:AE:4F:20:0BDntl3l"; var regex = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$"; var newformat = Regex.Ma

我有这样的字符串:00:1E:AE:4F:20:0BDntl3l

我想使用正则表达式从字符串中提取00:1E:AE:4F:20:0B的mac地址,并丢弃Dntl3l。如何在c中实现这一点

我已经尝试了下面的代码,但它仍然返回相同的字符串

    string s = "00:1E:AE:4F:20:0BDntl3l";
    var regex = "^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$";
    var newformat = Regex.Match(s, regex);
    Console.WriteLine(newformat);

以下几点对我很有用:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var macRegex = "([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
但我个人觉得这有点令人困惑,所以我会这样做:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var hexPair = "[0-9A-Fa-f]{2}";
var macRegex = $"{hexPair}:{hexPair}:{hexPair}:{hexPair}:{hexPair}:{hexPair}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
编辑:或者,如果将两者结合使用:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var hexPair = "[0-9A-Fa-f]{2}";
var macRegex = $"({hexPair}:){{5}}{hexPair}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
编辑2:我使用Enumerable提出了另一个方法。从LINQ和String.Join重复,尽管我认为这是一个过分的方法:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";    

// Make an IEnumerable of 6 hex pair regexes
var sixHexPairs = Enumerable.Repeat("[0-9A-Fa-f]{2}", 6);

// And join them with a ":"
var macRegex = string.Join(":", sixHexPairs);
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B

以下几点对我很有用:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var macRegex = "([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
但我个人觉得这有点令人困惑,所以我会这样做:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var hexPair = "[0-9A-Fa-f]{2}";
var macRegex = $"{hexPair}:{hexPair}:{hexPair}:{hexPair}:{hexPair}:{hexPair}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
编辑:或者,如果将两者结合使用:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";

var hexPair = "[0-9A-Fa-f]{2}";
var macRegex = $"({hexPair}:){{5}}{hexPair}";
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B
编辑2:我使用Enumerable提出了另一个方法。从LINQ和String.Join重复,尽管我认为这是一个过分的方法:

var s = "DSz00:1E:AE:4F:20:0BDntl3l";    

// Make an IEnumerable of 6 hex pair regexes
var sixHexPairs = Enumerable.Repeat("[0-9A-Fa-f]{2}", 6);

// And join them with a ":"
var macRegex = string.Join(":", sixHexPairs);
var result = Regex.Match(s, macRegex);

Console.WriteLine(result); // 00:1E:AE:4F:20:0B

它将不匹配,因为$,这意味着匹配字符串的结尾。你可以删除它,或者写一个正则表达式来覆盖剩余的位,任何字母数字?把它放在美元之前。或者仅仅是在17个字符处剪切字符串?从模式中删除$:var regex=^[0-9A-Fa-f]{2}[:-]{5}[0-9A-Fa-f]{2};是否可以选择只对字符串进行.Substring?除了删除尾部的$符号外,还可以删除前导的^,以防包含MAC的字符串也可以在MAC前面有一些字符。只对00:1E:AE:4F:20:0BDntl3l.Substring0,17进行匹配如何?它不会匹配,因为$,这意味着匹配到字符串的结尾。你可以删除它,或者写一个正则表达式来覆盖剩余的位,任何字母数字?把它放在美元之前。或者仅仅是在17个字符处剪切字符串?从模式中删除$:var regex=^[0-9A-Fa-f]{2}[:-]{5}[0-9A-Fa-f]{2};是否可以选择只对字符串进行.Substring?除了删除尾随的$符号外,还可以删除前导的“^”,以防包含MAC的字符串也可以在MAC前面有一些字符。只对00:1E:AE:4F:20:0BDntl3l.Substring0,17进行操作如何?