首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将普通字符串转换为MAC地址格式

将普通字符串转换为MAC地址格式
EN

Stack Overflow用户
提问于 2016-10-11 11:55:14
回答 2查看 5.8K关注 0票数 3

我正在尝试将一些字符串输入转换成使用MAC地址的正确格式。

所以我需要转换

代码语言:javascript
复制
00A0C914C829

代码语言:javascript
复制
00:A0:C9:14:C8:29

我有这个PowerShell脚本来实现这个目标:

代码语言:javascript
复制
$string = "00A0C914C829"
$out = $string -replace "([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])", '$1$2:$3$4:$5$6:$7$8:$9$10:$11$12'
$out

其中产出:

代码语言:javascript
复制
00:A0:C9:14:C8:29

但这一判决似乎长得离谱。

有什么办法能使这件事更简洁吗?

  • 我认为我需要使用()将每个部分分组到变量中,这就是为什么它如此长的原因。我也尝试过与^([0-9A-Fa-f]){12}$进行匹配,但这给出了输出9$2:$3$4:$5$6:$7$8:$9$10:$11$12 (12个组,每个组一个字符)。
  • 我还尝试了类似的regex ^(([0-9A-Fa-f]){2}){6}$ (每组6个字符),然后替换:$1:$2:$3:$4:$5:$6,但这给出了输出29:9:$3:$4:$5:$6

我想问题是我不明白团队是如何正常运作的..。如果有人能给我指明正确的方向,我会非常感激的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-11 12:08:14

从较小的单位来考虑。实际上,您希望在每两个字符之后插入: (除了字符串的末尾),而不是试图捕获每个字符并将其强制设置为所需的格式。

代码语言:javascript
复制
$s -replace '..(?!$)', '$&:'

此正则表达式一次匹配两个字符,并将它们替换为相同的字符(替换字符串中的$&表示匹配),然后是:。除了在字符串的末尾,这是通过一个负的前瞻性阻止匹配在字符串的末尾。这是因为regex引擎不会寻找向后扩展到以前匹配的匹配。因此,在前两个字符匹配之后,下一个匹配只能在第一个字符之后进行。这隐式地为您提供了要替换的两个字符组。

如果您真的需要的话,也可以使用.代替[0-9a-f],但我认为这里的输入验证问题与输出格式问题不同。输出代码应该能够信任字符串实际上只包含十六进制数字。

验证可以简单地进行,如

代码语言:javascript
复制
if ($s -notmatch '^[0-9a-f]{12}$') {
  throw
}

实际上,用这种方法检测格式错误的字符串要比检测替换是否没有任何作用要容易得多。

票数 10
EN

Stack Overflow用户

发布于 2021-11-01 15:28:48

来补充乔伊的答案。.NET有包含在验证中构建的PhysicalAddress类。解析方法接受多种格式。

String_

001122334455

00-11-22-33-44-55

0011.2233.4455 (仅限.NET 5及更高版本)

00:11:22:33:44:55 (仅限.NET 5及更高版本)

F0-E1-D2-C3-B4-A5

f0-e1-d2-c3-b4-a5 (仅限.NET 5及更高版本)

您需要安装PS7来解析其中的一些内容。我需要它来解析Cisco IOS格式

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39976679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档