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

PowerShell脚本修复:MT940文件指定区段删除逻辑错误

处理MT940文件时PowerShell脚本删除区段起始位置错误的排查与修复

示例MT940文件内容

-
:20:REF1234
:86:/ABCD/这是符合格式的备注
-
-
:20:REF5678
:86:不符合格式的备注
:90:XXX
-
-
:20:REF9012
:86:/EFGH/另一个符合格式的条目
-

问题脚本(原错误版本)

$content = Get-Content -Path "mt940.txt" -Raw
$fixedContent = $content -replace '(?s):86:(?!/..../).*?-', ''
Set-Content -Path "fixed_mt940.txt" -Value $fixedContent

问题原因分析

原脚本的正则表达式(?s):86:(?!/..../).*?-存在两个核心问题:

  1. 起始匹配位置错误:直接从:86:行开始匹配,没有定位到区段开头的单独-标记,导致删除时只从:86:行截断,而非整个区段。
  2. 边界匹配不严谨:.*?-会匹配到第一个-,但未确保这个-是单独占一行的区段结束标记,可能误删其他包含-的内容。

修复后的正则脚本

$content = Get-Content -Path "mt940.txt" -Raw
# 匹配前后单独占一行的-包裹的区段,且区段内存在:86:开头且不匹配/..../的行
$fixedContent = $content -replace '(?sm)^-$(\n(?!^-$).*?\n:86:(?!/..../).*?\n)^-$', ''
Set-Content -Path "fixed_mt940.txt" -Value $fixedContent

正则逻辑说明

  • (?sm):启用单行模式(.匹配换行)和多行模式(^/$匹配行首行尾)
  • ^-$:匹配单独占一行的-(区段起始标记)
  • (\n(?!^-$).*?\n:86:(?!/..../).*?\n):匹配区段内的内容,确保包含:86:开头且不符合/..../格式的行,同时跳过其他区段的-标记
  • ^-$:匹配区段结束的单独-

处理结果验证

修复后的脚本会删除第二个区段(包含不符合格式的:86:行),处理后的文件内容如下:

-
:20:REF1234
:86:/ABCD/这是符合格式的备注
-
-
:20:REF9012
:86:/EFGH/另一个符合格式的条目
-

内容的提问来源于stack exchange,提问作者SECØND BANANA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 09:47:09