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

PowerShell正则表达式匹配求助:含括号字符串识别异常

修正PowerShell正则匹配问题

你的正则代码在处理最后一个条目009012 APP-1(21).1时出现错误,核心问题有两个:

  • 全局匹配会提取所有符合的数字片段(包括括号内的21和末尾的1),导致额外输出CCI-1;
  • 第二组正则限制仅匹配2个字母开头,无法覆盖APP这类多字母前缀的情况,且未完整匹配括号和后续的.1部分。

方案1:按字符串结构拆分(推荐,简单直接)

直接针对每个条目的固定结构(开头数字 + 空格 + 后续内容)进行分组匹配,无需复杂格式验证:

$CCI_ID = @(
"003417 AR-2.1"
"003425 AR-2.9"
"003392 AP-1.12"
"009012 APP-1(21).1"
)

$CCI_ID | ForEach-Object {
    if ($_ -match '^(\d+)\s+(.+)$') {
        Write-Host "CCI-$($matches[1].Trim())"
        Write-Host $matches[2].Trim()
    }
}

方案2:修正原正则(需保留格式验证时使用)

如果必须验证后续内容的格式,调整正则以支持多字母前缀,并确保完整匹配后续部分,同时针对每个条目单独匹配而非全局提取:

$CCI_ID = @(
"003417 AR-2.1"
"003425 AR-2.9"
"003392 AP-1.12"
"009012 APP-1(21).1"
)

$CCI_ID | ForEach-Object {
    $matches = [regex]::Match($_, '^(\d+)\s+([a-zA-Z]+-\d(?:\(\d+\))?\.\d+)$')
    if ($matches.Success) {
        Write-Host "CCI-$($matches.Groups[1].Value.Trim())"
        Write-Host $matches.Groups[2].Value.Trim()
    }
}

修正后的正则说明:

  • [a-zA-Z]+匹配任意长度的字母前缀(支持2个或多个);
  • (?:\(\d+\))?匹配可选的带数字的括号(非捕获组,避免额外分组);
  • 整体确保每个条目只匹配一次,提取完整的两部分内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:40:46