从字符串中提取MAC地址

cra*_*dev 1 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.Match(s, regex);
    Console.WriteLine(newformat);
Run Code Online (Sandbox Code Playgroud)

VBo*_*off 7

以下对我有用:

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
Run Code Online (Sandbox Code Playgroud)

但我个人认为这有点令人困惑,所以我会这样做:

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
Run Code Online (Sandbox Code Playgroud)

编辑:或者,如果你把两者结合起来:

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
Run Code Online (Sandbox Code Playgroud)

编辑2:我Enumerable.Repeat从LINQ中得到的另一个String.Join(),虽然我认为这是一个矫枉过正:

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

// Make an IEnumberable 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
Run Code Online (Sandbox Code Playgroud)