我有一个像这样的字符串: 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)
以下对我有用:
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)
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |