【发布时间】: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 具有子类型。
我得到的最接近的是使用这个正则表达式:
(?<=((OBX(\|))\d{1,4}(\|)(SN|CE)(\|)(((.+?)\|)(\|))))((\^))
但是,这不起作用,因为我只需要将其限制为 OBX-5,并且不适用于插入符号之前的字符。
为冗长的帖子道歉!感谢您提供的任何帮助。
【问题讨论】:
-
我个人会编写代码来遍历这些行,检查给定的行是否需要替换插入符号(可能使用正则表达式),然后进行替换。试图用一个正则表达式做所有事情有时是不值得的。
-
为什么不修改 HL7 架构,在 OBX.5 字段中添加更多可选字段。无需任何代码即可轻松完成。然后反汇编程序将把那些
-
我决定选择自定义架构(我无法更新现有架构,因为它有 15 个以上的接口使用它)。谢谢你的建议。
-
我想提醒社区,在投票时提供评论以解释如何改进问题是惯例。在与全新和缺乏经验的用户合作时,这些习惯尤其重要。欢迎(回来?)Stack Overflow,@LewisHoulden!