用正则表达式替换或子串第一组数字

时间:2017-10-09 12:55:08

标签: regex powershell

我很难找到一种方法来获取PowerShell中文件名中的第一组数字。文件名可以类似于下面的文件名,但我只想获得第一个数字字符串,而不是其他任何内容。

示例文件名:

123456 (12).csv
123456abc.csv
123456(Copy 1).csv
123456 (Copy 1).csv

我目前正在尝试:

$test = "123456 (12).csv" 
$POPieces = $test -match "^[0-9\s]+$" 
Write-Host $POPieces

我对此的期望:

123456

1 个答案:

答案 0 :(得分:2)

-match运算符将匹配项存储在automatic variable $matches中。但是,您的正则表达式不仅包括数字,还包括空格(\s),因此您不一定只得到数字。将表达式更改为^\d+以仅匹配字符串开头的数字。使用Get-ChildItem枚举文件,建议为Martin Brandl

$POPieces = Get-ChildItem 'C:\root\folder' -Filter '*.csv' |
            Where-Object { $_.Name -match '^\d+' } |
            ForEach-Object { $matches[0] }