You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取正则表达式捕获组的多个匹配结果

解决PowerShell正则捕获组内容无法访问的问题

我来帮你搞定这个问题!你已经成功用正则匹配到了目标内容,但之所以看不到第一个捕获组的结果,是因为PowerShell默认输出Match对象时,只会展示整个匹配项(也就是Group 0)的信息,不会自动展开显示捕获组的具体值。

如何正确访问第一个捕获组的内容

每个Match对象里的Groups属性包含了所有捕获组:

  • Groups[0]:整个正则匹配的内容(比如Computer: xxx)
  • Groups[1]:你定义的第一个捕获组的内容(也就是你要的xxx、yyy)

你可以通过遍历$matches集合,逐个提取Groups[1].Value来获取结果:

方法1:foreach循环遍历

$input = "Row 1: Computer: xxx Last Heartbeat: 4/9/2020 11:27:24 AM Row 2: Computer: yyy Last Heartbeat: 4/9/2020 11:27:37 AM"
$matches = ([regex]'Computer: ([^ ]+)').Matches($input)

foreach ($match in $matches) {
    # 提取第一个捕获组的内容
    $match.Groups[1].Value
}

执行后会输出:

xxx
yyy

方法2:用管道快速收集到数组

如果你想直接把所有捕获组结果存入数组,可以用ForEach-Object快速处理:

# 把结果存入数组
$computerNames = $matches | ForEach-Object { $_.Groups[1].Value }

# 遍历数组使用
foreach ($name in $computerNames) {
    Write-Host "检测到计算机名:$name"
}

为什么之前的输出看不到捕获组内容?

你之前直接输出$matches时,PowerShell只展示了Match对象的基础属性(比如Value是Group 0的内容,Groups只显示了存在的组编号),但没有展开每个Group的具体值。只有主动访问Groups[1].Value,才能拿到你需要的捕获组结果。

内容的提问来源于stack exchange,提问作者AbraCadaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 08:27:52