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
相关产品推荐
相关产品推荐

