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

如何用PowerShell通过指定短语提取上一行中的目标单词

解决方案

问题分析

你的代码存在两个核心问题:

  • 错误访问了匹配行($_.Line)而非目标上一行,上一行内容实际存储在$_.Context.PreContext[0]中
  • 使用Split(' ')拆分带引号的XML属性不可靠,既会把name="variable"当成一个整体,也无法应对空格数量变化的情况

方法一:正则提取上下文行的属性值

利用Select-String的-Context参数获取上一行,再通过正则精准捕获双引号包裹的属性值:

$var = Select-String $DirPath -Pattern 'key phrase' -SimpleMatch -Context 1 | ForEach-Object {
    # 获取匹配行的上一行并去除首尾空白
    $prevLine = $_.Context.PreContext[0].Trim()
    # 正则匹配name属性的取值(捕获双引号内的内容)
    if ($prevLine -match 'name="([^"]+)"') {
        $matches[1]
    }
}

方法二:直接解析XML(更可靠)

因为目标内容是标准XML结构,直接用XML解析器定位节点获取属性值,避免正则的局限性:

# 读取并加载XML文件
$xmlContent = Get-Content $DirPath -Raw
$xml = [xml]$xmlContent
# 通过XPath找到value为"key phrase"的data节点,提取name属性
$var = $xml.SelectNodes('//data[value="key phrase"]') | ForEach-Object { $_.name }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:50:01