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

时间:2019-02-12 21:49:32

标签: c# regex biztalk hl7

2.5小时后,尝试创建一个将\替换为Caret ^的正则表达式,我的最后选择是询问社区。

示例消息:

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,并且不适用于插入符号之前的字符。

对冗长的帖子表示歉意!感谢您可以提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

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

我将使用一个自定义管道组件,该组件逐行读取流,并进行所需的任何更改。