如何在PowerShell中将数字附加到RegEx区域变量?

时间:2014-12-04 11:43:32

标签: regex powershell

我在顺序命名的文件夹中有JPEG文件:table1.jpg,table2.jpg,table3.jpg,...,table11.jpg

我需要按顺序对它们进行一些处理,但是Get-ChildItem将返回此值(即使使用Sort):

table1.jpg
table10.jpg
table11.jpg
table2.jpg
table3.jpg
...

我想添加0以正确的顺序获取它们:

table01.jpg
table02.jpg
table03.jpg
...
table11.jpg

我尝试使用RegEx和此命令预览新名称:

Get-ChildItem | % { $_.Name -replace "(.*[^0-9])([0-9]{1}\.jpg)",'$10$2' }

这个想法是获得名称的第一部分而不是第一个区域中的任何数字,一个数字加上第二个区域中的扩展名。这将排除两位数的文件。然后我可以替换为:第一个区域+ 0 +第二个区域。

我的问题是“0”被视为10美元而不是1美元+“0”,我不知道怎么说。

正确的语法是什么?我试过“$ 10 $ 2”,“$ 1 \ 0 $ 2”,“$ 1`0 $ 2”,'$ 1“0”$ 2'

3 个答案:

答案 0 :(得分:1)

您可以使用命名组:

$filename -replace "(?<first>.*[^0-9])(?<second>[0-9]{1}\.jpg)", '${first}0${second}'

答案 1 :(得分:0)

'"$1"0$2'

这应该这样做。

答案 2 :(得分:0)

用于指示编号反向引用而没有歧义的正确语法是${1}

这是您的陈述的更正版本:

Get-ChildItem | % { $_.Name -replace "(.*\D)(\d\.jpg)",'${1}0$2' }

注意:我还使用\D[^0-9]的内置字符类,\d代替[0-9]