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

PowerShell解析字符串创建二维数组及索引访问技术问询

解决PowerShell解析行并构建二维数组的问题

我来帮你搞定这个PowerShell二维数组的需求!你的思路是对的,现在咱们把正则匹配和数组处理的部分优化得更顺畅,一步步来:

1. 优化正则匹配,精准提取数字

你当前用Split加Matches的方式有点绕,其实可以直接用正则一次性捕获RowNumber和ColumnNumber后面的数字,效率更高。用这个匹配模式就够了:

$regexPattern = 'RowNumber="(\d+)"\s+ColumnNumber="(\d+)"'

这个模式会直接把行号和列号分别放到两个捕获组里,不用再拆分字符串折腾。

2. 二维数组的创建与存储

在PowerShell里,咱们先初始化一个空数组,每提取到一组行号列号,就打包成子数组再添加进去。这里要注意一个小细节:添加子数组时要加个前置逗号,确保是把整个子数组作为一个元素加入外层数组,而不是把两个数字分别追加。

如果你的数据量特别大,也可以用[System.Collections.ArrayList]来代替普通数组,避免频繁创建新数组带来的性能损耗。

3. 完整改进代码示例

# 初始化空数组存储二维数据
$twoDArray = @()
# 定义正则匹配规则
$regexPattern = 'RowNumber="(\d+)"\s+ColumnNumber="(\d+)"'

foreach ($line in $data) {
    # 检查当前行是否符合目标格式
    if ($line -match $regexPattern) {
        # 从自动变量$matches里提取捕获到的数字,转成整数类型
        $rowNum = [int]$matches[1]
        $colNum = [int]$matches[2]
        # 把行号列号打包成子数组,添加到二维数组中
        $twoDArray += ,@($rowNum, $colNum)
        Write-Host "提取到:行号$rowNum,列号$colNum"
    }
}

4. 如何访问二维数组的值

构建好数组后,就可以通过外层索引+内层索引的方式直接访问了:

# 获取第1组数据的行号(索引从0开始)
$firstRow = $twoDArray[0][0]
# 获取第1组数据的列号
$firstCol = $twoDArray[0][1]

# 遍历整个二维数组,打印所有数据
foreach ($item in $twoDArray) {
    Write-Host "行:$($item[0]),列:$($item[1])"
}

补充:应对属性顺序变化的情况

如果你的行里RowNumber和ColumnNumber的顺序可能颠倒,可以调整正则来兼容:

$regexPattern = '(?:RowNumber="(\d+)"\s+ColumnNumber="(\d+)"|ColumnNumber="(\d+)"\s+RowNumber="(\d+)")'

if ($line -match $regexPattern) {
    if ($matches[1]) {
        $rowNum = [int]$matches[1]
        $colNum = [int]$matches[2]
    } else {
        $rowNum = [int]$matches[4]
        $colNum = [int]$matches[3]
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:26:13