如何在字符串中的多个位置插入字符?
How do I insert chars at multiple places in a string?
我想在每个第二个字符后插入“:” - 最终结果应如下所示 51:40:2e:c0:11:0b:3e:3c
。
我的解决方案
$s = "51402ec0110b3e3c"
for ($i = 2; $i -lt $s.Length; $i+=3)
{
$s.Insert($i,':')
}
Write-Host $s
returns
51:402ec0110b3e3c
51402:ec0110b3e3c
51402ec0:110b3e3c
51402ec0110:b3e3c
51402ec0110b3e:3c
51402ec0110b3e3c
为什么只把Write-Host放在最后面,$s会返回多次?此外,看起来 $s 在每次循环后都会返回其原始值,覆盖之前的循环...
我原以为循环会完成与此相同的操作:
$s = $sInsert(2,':').Insert(5,':').Insert(8,':').Insert(11,':').Insert(14,':').Insert(17,':').Insert(20,':')
这是因为我nsert returns a new string。它不会就地修改。所以你必须改变
$s.Insert($i,':')
至
$s = $s.Insert($i,':')
您也可以通过 -replace
运算符不循环执行此操作:
$s = "51402ec0110b3e3c"
$s = $s -replace '..(?!$)','[=10=]:'
-split
和 -join
的组合也有效:
$s = "51402ec0110b3e3c"
$s = $s -split '(..)' -ne '' -join ':'
将十六进制字符串转换为冒号分隔字符串的另一种方法是使用 -split
运算符和指定两个连续字符的模式。这个...
$s = "51402ec0110b3e3c"
($s -split '(..)').Where({$_}) -join ':'
... 会给出这个 = 51:40:2e:c0:11:0b:3e:3c
.
.Where()
过滤掉拆分留下的空白条目。 [咧嘴一笑]
保重,
李
我想在每个第二个字符后插入“:” - 最终结果应如下所示 51:40:2e:c0:11:0b:3e:3c
。
我的解决方案
$s = "51402ec0110b3e3c"
for ($i = 2; $i -lt $s.Length; $i+=3)
{
$s.Insert($i,':')
}
Write-Host $s
returns
51:402ec0110b3e3c
51402:ec0110b3e3c
51402ec0:110b3e3c
51402ec0110:b3e3c
51402ec0110b3e:3c
51402ec0110b3e3c
为什么只把Write-Host放在最后面,$s会返回多次?此外,看起来 $s 在每次循环后都会返回其原始值,覆盖之前的循环...
我原以为循环会完成与此相同的操作:
$s = $sInsert(2,':').Insert(5,':').Insert(8,':').Insert(11,':').Insert(14,':').Insert(17,':').Insert(20,':')
这是因为我nsert returns a new string。它不会就地修改。所以你必须改变
$s.Insert($i,':')
至
$s = $s.Insert($i,':')
您也可以通过 -replace
运算符不循环执行此操作:
$s = "51402ec0110b3e3c"
$s = $s -replace '..(?!$)','[=10=]:'
-split
和 -join
的组合也有效:
$s = "51402ec0110b3e3c"
$s = $s -split '(..)' -ne '' -join ':'
将十六进制字符串转换为冒号分隔字符串的另一种方法是使用 -split
运算符和指定两个连续字符的模式。这个...
$s = "51402ec0110b3e3c"
($s -split '(..)').Where({$_}) -join ':'
... 会给出这个 = 51:40:2e:c0:11:0b:3e:3c
.
.Where()
过滤掉拆分留下的空白条目。 [咧嘴一笑]
保重,
李