将纯字符串转换为 MAC 地址格式

2024-01-02

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

所以我需要转换

00A0C914C829

to

00:A0:C9:14:C8:29

我有这个PowerShell脚本来实现这一点:

$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

哪个输出:

00:A0:C9:14:C8:29

但那个正则表达式看起来长得可笑。

有什么方法可以让这个更简洁吗?


  • 我想我需要使用将每个部分分组为变量(),这就是为什么它这么长。我也尝试过与^([0-9A-Fa-f]){12}$,但这给出了输出9$2:$3$4:$5$6:$7$8:$9$10:$11$12(12组,每组1个字符)
  • 我也尝试过类似的正则表达式^(([0-9A-Fa-f]){2}){6}$(6组,每组2个字符)然后替换:$1:$2:$3:$4:$5:$6,但这给出了输出29:9:$3:$4:$5:$6

我认为问题是我不明白团体如何正常工作......如果有人能指出我正确的方向,我将非常感激!


从更小的单位来考虑。你实际上想要插入:每两个字符之后(字符串末尾除外),而不是尝试捕获每个字符并强制其转换为所需的格式。

$s -replace '..(?!$)', '$&:'

此正则表达式一次匹配两个字符,并将它们替换为相同的字符 ($&替换字符串中表示匹配)后跟:。字符串末尾除外,这是通过负向前瞻来防止在字符串末尾匹配的。这是有效的,因为正则表达式引擎不会查找向后延伸到先前匹配的匹配。所以在前两个字符匹配之后,下一个匹配只能发生after第一个。这隐式地为您提供了两个要替换的字符组。

代替.你也可以使用[0-9a-f]如果您确实想要,但我认为输入验证与此处的输出格式化是不同的问题。输出代码应该能够相信该字符串确实只包含十六进制数字。

验证可以简单地完成

if ($s -notmatch '^[0-9a-f]{12}$') {
  throw
}

实际上,通过这种方式检测格式错误的字符串比检测替换是否不执行任何操作更容易。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将纯字符串转换为 MAC 地址格式 的相关文章

随机推荐

  • C++11 中的常量表达式中是否允许使用逗号运算符?

    在回答的过程中这个问题关于SO https stackoverflow com questions 16563114 are these null pointers or are they pointers to address 0 165
  • 使用端口 1433 的 Azure 输入端点被阻止?

    我正在运行一个 Windows Azure 辅助角色 该角色在端口 1433 上公开 WCF 服务 该端口也被定义为输入 TCP 端点
  • 自 SonarQube 5.2 起,批处理端不再支持任务

    我安装 SonarQube 5 2 和 Sonar runner 2 4 最新版本 我设法启动 SonarQube 但在尝试运行 Sonar runner 时出现以下错误 ERROR Unable to execute Sonar ERRO
  • 在devise 2.0中使用omniauth从facebook获取用户个人资料大图片

    我想从 Facebook 获取用户个人资料大图或普通图片 现在我使用以下代码从用户个人资料图片中获取方形版本 image gt access token info image http graph facebook com id pictu
  • 返回布尔值的 Java 方法的命名约定

    我喜欢在其他语言中的方法 函数名称末尾使用问号 Java 不允许我这样做 作为解决方法 我还能如何在 Java 中命名返回布尔值的方法 使用is has should can在某些情况下 在方法前面听起来不错 有没有更好的方法来命名这些方法
  • 如何在 PostgresQL 10 中备份分区表

    是否可以使用 PostgreSQL 10 备份特定分区表 使用时 sudo pg dump Fc f home schema backup t schema partitioned table dbname 我只得到基表的骨架 没有任何值
  • 锁分割与锁条带化

    以下是 Joshua 的 Effective Java 的摘录 如果您确实在内部同步您的类 您可以使用各种 实现高并发的技术 如锁分割 锁 条带化和非阻塞并发控制 上面表明锁分割和锁条带是两种不同的技术 但是当我试图找出它们之间的区别时 我
  • 如何将 Django 应用程序部署到 (AWS) 域名?

    我只使用 Django 几个星期 刚刚学习了部署 我有一个 AWS EC2 实例 我可以将我的 Django 网站 应用程序部署到其中 即 如果我在浏览器中访问 IP 地址 我就可以访问我的网站 但是 我不知道如何将同一个网站部署到我在 A
  • std::initializer_list{x, y, z} (CTAD) 有效吗?

    当构建一个std initializer list u 明确地 模板参数 U 被推导 例如 使用类模板参数推导 CTAD 换句话说 我知道以下陈述是有效的 std initializer list u
  • Rails 资产管道:将资产包含在公共文件夹而不是资产文件夹中是否是一个好习惯?

    我一直在努力将 Google Analytics 添加到我的 Rails 4 应用程序中 请参阅这个帖子 https stackoverflow com q 31428864 5086345 我通过在新文件中添加 Google 提供的 Ja
  • Lucene - 这是巨大索引的正确答案吗?

    Lucene 是否能够索引每个 50K 的 500M 文本文档 对于单个术语搜索和 10 个术语搜索 此类索引的预期性能如何 我应该担心并直接转移到分布式索引环境吗 Saar 是的 Lucene 应该能够处理这个问题 根据以下文章 http
  • 从音频文件输入中检测人声

    我正在尝试实现自动录音功能 类似于会说话的汤姆应用程序 我使用以下代码从录音机读取输入并分析缓冲区 float totalAbsValue 0 0f short sample 0 numberOfReadBytes audioRecorde
  • Git LFS - 如何使用一个命令跟踪多种文件类型

    我在 Git LFS 网站和文档中看到此命令 git lfs track psd 我的项目中有多种文件类型 我想使用 LFS 进行跟踪 并且希望在未来的项目中跟踪所有这些相同的文件类型 我希望能够粘贴单个命令来跟踪所有这些扩展 这可能吗 经
  • C++ 字符串文字数据类型存储

    void f char c Hello World 字符串存储在哪里 它有什么属性呢 我只知道它是一个常数 还有什么 我可以从函数体内返回它吗 它与您的二进制文件一起打包 我所说的打包是指硬连线 所以是的 您可以返回它并在其他地方使用它 但
  • 访问 Jenkins 中的构建变更日志

    我一直在绞尽脑汁地试图找到一种方法 将 Jenkins 生成的更改列表 来自 SVN pull 包含到我们的 Testflight 笔记中 我正在使用 Testflight 插件 它有一个注释字段 但詹金斯似乎没有创建任何参数 令牌来嵌入该
  • Java 中的持久数据结构

    有谁知道关于在 Java 中创建和使用持久数据结构的库或至少一些研究吗 我并不是将持久性称为长期存储 而是将持久性称为不变性 请参阅维基百科条目 http en wikipedia org wiki Persistent data stru
  • ASP.NET Identity - 将用户 ID 主键默认类型从字符串更改为 int 以及使用自定义表名称时出错

    我正在使用 Microsoft AspNet Identity 2 0 0 beta1 和 Entity Framework 6 1 0 beta1 2014 年 2 月 11 日发布 当我尝试将用户 ID 主键的默认类型从字符串更改为 i
  • 通过套接字读取和写入字节数据包

    我想通过 Socket 将 Android 设备连接到外部设备 Socket 连接外部设备成功 现在 如果外部设备需要任何数据 则按照以下顺序将字节数据包数据的请求发送到套接字 如果外部设备接收数据正确 则发送字节数据作为响应 参数 方法名
  • 如何使用 C# 从 BIOS 获取 CPU 温度信息?

    如何使用 C 从 Bios 获取 CPU 温度信息 我尝试了中的代码CPU温度监控 https stackoverflow com questions 2923984 cpu temperature monitoring c 但没有运气 e
  • 将纯字符串转换为 MAC 地址格式

    我正在尝试将一些字符串输入转换为正确的格式以使用 MAC 地址 所以我需要转换 00A0C914C829 to 00 A0 C9 14 C8 29 我有这个PowerShell脚本来实现这一点 string 00A0C914C829 out