我有一个 Powershell 文件myfile.ps1
:
function Do-It
{
$items = # A command that returns a collection of strings like:
# Element 12657 - <Description trext>
# Element 12656 - <Description trext>
# Element 12655 - <Description trext>
# ...
$pattern = 'Element\s(\d*).*';
foreach ($item in $items) {
$res = $item -match $pattern;
$len = $matches.Length;
$id = $matches[0];
Write-Output "$len $id";
}
}
问题是我的输出是:
1 Element 12657 - <Description trext>
1 Element 12656 - <Description trext>
1 Element 12655 - <Description trext>
...
所以找不到匹配。但是,如果我从cmd
执行此操作,那么我会得到结果。
我做错了什么?需要逃避什么?感谢
答案 0 :(得分:2)
看一看,看看它手动做什么:
PS U:\> $item = 'Element 12657 - <Description trext>'
PS U:\> $pattern = 'Element\s(\d*).*'
PS U:\> $Matches
Name Value
---- -----
1 12657
0 Element 12657 - <Description trext>
我会尝试$id = $matches[1];
。
答案 1 :(得分:1)
正则表达式的第一个匹配是整个匹配的字符串。因此,您想要的匹配是$matches[1]
。我相信$Matches.Length
会返回1,因为它是一个包含两个组的匹配列表。