【问题标题】:Using Regex.Replace to safely escape hl7 control character使用 Regex.Replace 安全地转义 hl7 控制字符
【发布时间】:2019-02-12 21:49:31
【问题描述】:

在尝试创建一个将插入符号 ^ 替换为 \S\ 的正则表达式 2.5 小时后,我最后的办法是询问社区。​​p>

示例消息:

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

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

【问题讨论】:

  • 我个人会编写代码来遍历这些行,检查给定的行是否需要替换插入符号(可能使用正则表达式),然后进行替换。试图用一个正则表达式做所有事情有时是不值得的。
  • 为什么不修改 HL7 架构,在 OBX.5 字段中添加更多可选字段。无需任何代码即可轻松完成。然后反汇编程序将把那些
  • 我决定选择自定义架构(我无法更新现有架构,因为它有 15 个以上的接口使用它)。谢谢你的建议。
  • 我想提醒社区,在投票时提供评论以解释如何改进问题是惯例。在与全新和缺乏经验的用户合作时,这些习惯尤其重要。欢迎(回来?)Stack Overflow,@LewisHoulden!

标签: c# regex biztalk hl7


【解决方案1】:

遇到过类似的情况,平面文件不一致...

我会使用一个自定义的管道组件,它通过“line”读取流“line”并进行您需要的任何更改。

【讨论】:

  • 感谢您花时间回答。经过深思熟虑,使用自定义管道组件似乎是一种 dirty 方法,因为在某些情况下,如果包含已经转义的插入符号怎么办,如果目标要求它们未转义怎么办?最后,我选择了自定义模式。再次感谢您的帮助。非常感谢。
  • @LewisHoulden 哦,那么可以肯定的是,自定义 Schema 是正确的方法。实际上很常见。
猜你喜欢
  • 2019-04-22
  • 2010-09-22
  • 2013-02-05
  • 2012-04-02
  • 2023-03-10
  • 1970-01-01
  • 2017-08-17
  • 2014-05-31
  • 1970-01-01
相关资源
最近更新 更多