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

PowerShell正则匹配后提取内容并插入对应行下方的问题

PowerShell正则批量处理文本行插入内容

需求场景

原文本文件内容:

fill
---example---
fill
fill
---copy---
fill

期望处理后效果:

fill
---example---
example
fill
fill
---copy---
copy
fill

需要提取每行中---包裹的文本,插入到对应行的下方,同时完整保留原文件的其他内容。

问题原因

你之前的代码失效,是因为$matches是PowerShell的全局变量,在批量替换时无法绑定每个匹配项的分组内容,导致所有替换都复用了最后一次匹配的结果,最终出现全文件被第一个匹配项覆盖的问题。

两种正确解决方案

方案一:逐行处理(直观易扩展)

通过ForEach-Object遍历每一行,匹配后输出原行和提取的内容:

(Get-Content -Path .\fichier.txt) | ForEach-Object {
    if ($_ -match '---(?<text>.*)---') {
        $_
        $matches['text']
    } else {
        $_
    }
} | Set-Content -Path .\fichier.txt

方案二:简化正则替换(简洁高效)

利用-replace的捕获组引用语法,直接在替换字符串中引用匹配内容,注意用反引号转义$避免变量解析:

(Get-Content -Path .\fichier.txt) -replace '---(.*)---', "`$0`n`$1" | Set-Content -Path .\fichier.txt
  • $0:代表整个匹配的原行内容(比如---example---)
  • $1:代表第一个捕获组的内容(比如example)
  • `n:插入换行符,实现将提取内容放到下一行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 22:27:14