使用Regex.Replace安全地转义hl7控制字符

问题描述 投票:0回答:1

在2.5小时后尝试创建一个将Caret ^替换为\ S \的正则表达式,我的最后一招是向社区提问。

示例消息:

OBX|1|SN|test one^example test one||^9||||||F
OBX|2|ST|test two^example test two||Critical||||||F
OBX|3|NM|test three^example test one||80|bpm|||||F
OBX|4|CE|1^Test Recorded||-3^U|ml|||||F
OBX|5|CE|2^Anchor||2^results||||||F

要求:OBX-5中的插入符需要替换为\ S \,但仅当它是OBX段时,OBX-2的值为CE或SN。原因是Biztalk HL7反汇编程序无法处理OBX-5中的插入符号,因为它不够聪明,如果OBX-2的值类型为CE或SN,则OBX-5具有子类型。

见这里:https://social.msdn.microsoft.com/Forums/en-US/3b73edde-575c-42c8-91ed-a9957f7b6d4f/biztalk-hl7-variable-datatypes-ex-obx5?forum=biztalkgeneral

我得到的最接近的是使用这个正则表达式:(?<=((OBX(\|))\d{1,4}(\|)(SN|CE)(\|)(((.+?)\|)(\|))))((\^))

但是,这不起作用,因为我只需将其约束到OBX-5,并且不适用于插入符之前的字符。

为漫长的帖子道歉!感谢您提供的任何帮助。

c# regex biztalk hl7
1个回答
0
投票

有不一致的平面文件的类似情况......

我会使用一个自定义管道组件,它按“行”读取流“行”,并根据需要进行任何更改。

© www.soinside.com 2019 - 2024. All rights reserved.