2013-05-07 96 views
1

使用Powershell,我试图删除字符串的数字部分的前导零。这里有几个例子和预期成果:powershell正则表达式删除数字

AB012需要成为AB12

ABC010需要成为ABC10

我试过以下,但它摆脱全零。我怎么能告诉它只删除前导零?字符串的格式将始终是字母后跟数字。但是,字母的长度可能会有所不同。

$x = ABC010 
$y = $x -replace '[0]' 
$y 

这将显示ABC1,我希望显示ABC10。

谢谢。

回答

2

这个正则表达式搜索一个字母后跟任意数字0,并将字母保留在替换模式中,但删除零:

$x = $x -replace '([a-z])0*', '$1' 
+0

+1我以''(\ D)0 *','$ 1''结尾;) – 2013-05-07 14:36:42

+0

'([a-z])0 *','$ 1'也有效。谢谢! – user2166281 2013-05-07 14:37:03

2

尝试这个表达式与向后看和前瞻断言

'(?<=.+)(0)(?=.+)' 

的问题是,如果你有串像在这种情况下使用“0AB0101”即成为“0AB11”:

'(?<=\D)(0)(?=.+)' 
+0

'(?<= +)(0)(= +?)'工作。谢谢!!! – user2166281 2013-05-07 14:34:20

0

这里,用于评估的数字作为编号另一种选择:

PS> [regex]::replace('ABC010','(\d+)',{iex $args[0]}) 
ABC10 

或者使用TrimStart方法:

PS> [regex]::replace('ABC010','(\d+)',{$args[0].ToString().TrimStart('0')}) 
ABC10