如何在Powershell中用REGEX解析含换行的SWIFT金融报文字段
问题原因
你遇到的匹配失效问题核心是两个原因:
- 默认情况下PowerShell的
Select-String处理输入时会按行拆分内容,每一行单独执行正则匹配,跨两行的字段被拆成两个独立匹配对象,自然无法识别到换行符。 - 正则默认配置下
.元字符不会匹配\r/\n换行符,就算传入完整字符串,原有规则也无法覆盖多换行的场景。
解决方案
完全可以仅通过正则完成解析需求,无需单独编写字段结束判断函数,操作步骤如下:
- 首先读取SWIFT报文时将完整内容加载为单个字符串,不要逐行读取。如果是从文件读取,加
-Raw参数即可:
$swift = Get-Content -Path "你的SWIFT报文文件路径" -Raw
- 统一使用适配SWIFT字段规则的正则表达式,无需分开写带/不带换行的两个规则,匹配逻辑为识别
:61:字段开头后,一直匹配到下一个:两位数字:格式的SWIFT字段开头前停止,自动覆盖所有换行场景:
# 正则说明:SingleLine参数让.匹配所有字符包括换行,预读断言判断下一个字段的起始标识 $pattern = ':61:(?:.(?!:\d{2}:))+' $transaction = [regex]::Matches($swift, $pattern, [System.Text.RegularExpressions.RegexOptions]::SingleLine).Value
如果偏好使用Select-String,也可以改写为:
$transaction = $swift | Select-String -Pattern $pattern -AllMatches -SingleLine | ForEach-Object { $_.Matches.Value }
额外说明
如果你的SWIFT报文中存在超过2行的:61字段,上述规则也可以自动适配,不需要额外调整。
内容的提问来源于stack exchange,提问作者Kai Herrmann
相关产品推荐
相关产品推荐

