这段代码实际上有效,我很好奇我是否幸运(!?)并在Power Shell语言中发现了一个错误(这是伪代码,但它说明了我的问题):
$regex = "prefix([0-9]+)"
$collection = Get-Collection | Where-Object {$_.Name -match $regex} `
| ForEach-Object { [int] $Matches[1] }
输入基本上是对象,其属性Name
可以是格式“prefix [Integer]”。如果是这种情况,我想提取该整数并将其插入一个新序列。
这似乎有效,但感觉我正在利用Power Shell语言中的实现细节。
你会如何解决这个问题?
答案 0 :(得分:2)
问题是每个管道表达式都是一个闭包。
Where-Object
只会发送与管道匹配的项目,而不是上下文。
最简单易懂的方法是:
Get-Collection | ForEach-Object { if($_.Name -match $regex) { [int] $Matches[1] } }
答案 1 :(得分:0)
你没有在这里利用任何东西,它对我来说看起来非常有用。
Where-Object
ForEach-Object
循环,该循环只是将管道中的正则表达式匹配表示为整数。完全正常的代码。有什么问题?