删除 powershell 中的前导零
Remove leading zeros in powershell
我有几个字符串并尝试删除它们的前导零。我知道我可以使用 TrimStart()
但如果所有数字都为零,那就错了。
$Test = "00000.22"
$Test = $Test.trimstart('0')
结果是 .22,我期望的是 0.22。我怎样才能实现它?谢谢。
您可以使用类型转换为十进制
$Test = "00000.22"
[decimal]$Test
纯文本解决方案是使用运算符和正则表达式:
PS> '00000.22' -replace '^0+', '0'
0.22
^0+
匹配字符串开头 (^
) 的一个或多个 (+
) 零,并用 单个 [=66= 替换它们] 零。
如果您还想确保正确处理具有非 0
and/or 整数部分且没有小数部分的数字,请使用
-replace '^0+(?=[^.])'
(注意缺少替换操作数,它有效地删除了匹配的内容):
PS> ('00000.22', '0000', '00001.22').ForEach({ $_ -replace '^0+(?=[^.])' })
0.22
0
1.22
正 look-ahead 断言 (?=[^.])
有效地删除了所有前导零 (^0+
) 只要这样的零后面没有跟文字 .
([^.]
).
如果你做想要像'00000.22'
这样的东西变成'.22'
,即如果你想删除整数部分,如果它恰好是0
,正则表达式变得更简单:'^0+(?=.)'
很方便,在大多数情况下可能工作正常,但也有 陷阱 :
您正在将数据类型更改为 [decimal]
,然后将其转换回字符串 可以生成 culture-specific 表示形式,其中 .
转换为 ,
(也就是说,PowerShell 本身经常应用 invariant 文化,always 使用.
);例如:
# Cast to [decimal] using the German culture ('de')
PS> [System.Threading.Thread]::CurrentThread.CurrentCulture = 'de'; [decimal] '0000.22'
0,22 # !! Note the "," instead of "."
即使 high-precision 数据类型(例如 [decimal]
不太可能出现舍入错误 也是可能的:
PS> [decimal] '00.99999999999999999999999999999'
1.0000000000000000000000000000 # !! rounding occurred
我有几个字符串并尝试删除它们的前导零。我知道我可以使用 TrimStart()
但如果所有数字都为零,那就错了。
$Test = "00000.22"
$Test = $Test.trimstart('0')
结果是 .22,我期望的是 0.22。我怎样才能实现它?谢谢。
您可以使用类型转换为十进制
$Test = "00000.22"
[decimal]$Test
纯文本解决方案是使用
PS> '00000.22' -replace '^0+', '0'
0.22
^0+
匹配字符串开头 (^
) 的一个或多个 (+
) 零,并用 单个 [=66= 替换它们] 零。
如果您还想确保正确处理具有非 0
and/or 整数部分且没有小数部分的数字,请使用
-replace '^0+(?=[^.])'
(注意缺少替换操作数,它有效地删除了匹配的内容):
PS> ('00000.22', '0000', '00001.22').ForEach({ $_ -replace '^0+(?=[^.])' })
0.22
0
1.22
正 look-ahead 断言 (?=[^.])
有效地删除了所有前导零 (^0+
) 只要这样的零后面没有跟文字 .
([^.]
).
如果你做想要像'00000.22'
这样的东西变成'.22'
,即如果你想删除整数部分,如果它恰好是0
,正则表达式变得更简单:'^0+(?=.)'
您正在将数据类型更改为
[decimal]
,然后将其转换回字符串 可以生成 culture-specific 表示形式,其中.
转换为,
(也就是说,PowerShell 本身经常应用 invariant 文化,always 使用.
);例如:# Cast to [decimal] using the German culture ('de') PS> [System.Threading.Thread]::CurrentThread.CurrentCulture = 'de'; [decimal] '0000.22' 0,22 # !! Note the "," instead of "."
即使 high-precision 数据类型(例如
[decimal]
不太可能出现舍入错误 也是可能的:PS> [decimal] '00.99999999999999999999999999999' 1.0000000000000000000000000000 # !! rounding occurred