【问题标题】:HL7 extract an entire segment/ segments/content between each repeating segmentHL7 在每个重复段之间提取整个段/段/内容
【发布时间】:2015-03-19 17:35:16
【问题描述】:

我有一条 HL7 消息,其中包含一个 MSH 段和多个 PIV 段。

使用 Java REGEX,我需要做这些:

1) 提取整个MSH段

2) 找出每个出现的 PV1 段。

3) 提取存在于每个 PV1 段之间的全部内容/段 - 包括 PV1 段。

我该如何完成上述任务?

以下是示例 HL7 消息:

MSH|^~\&|OADD|${FACILITY}|HELIX||201012010910||ORU^R01|20101720000042|T|2.2
PID|||PX65^^^MRENTR||Mayer^Ronny
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
OBX|2|NM|K^Potassium^0|1.1|4.5|mmol/L|3.5-5.0||||F|||201012010905|IM^|8035^COX^CATHERINE
(IM)
OBX|3|CE|CL^Chloride^0|1.1|100|mmol/L|98-109||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)

所以最终目标是有一个这样的消息 - 在每个 PV1 段之前有提取的 MSH 段。然后创建一个新的 HL7 消息对象,其中包含每个这样的 HL7 消息。在我的示例中,将创建 3 条 hl7 消息 - 每条消息都将传递给 HAPI 解析器。

MSH|^~\&|OADD|${FACILITY}|HELIX||201012010910||ORU^R01|20101720000042|T|2.2
PID|||PX65^^^MRENTR||Mayer^Ronny
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
OBX|2|NM|K^Potassium^0|1.1|4.5|mmol/L|3.5-5.0||||F|||201012010905|IM^|8035^COX^CATHERINE
(IM)
OBX|3|CE|CL^Chloride^0|1.1|100|mmol/L|98-109||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
MSH|^~\&|OADD|${FACILITY}|HELIX||201012010910||ORU^R01|20101720000042|T|2.2
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)
MSH|^~\&|OADD|${FACILITY}|HELIX||201012010910||ORU^R01|20101720000042|T|2.2
PV1||I||2|||9898^Jackson^Burt^T|||||||||||IP||||||||||||||||||||||||||201012010840
OBX|1|NM|NA^Sodium^0|1.1|140^3|mmol/L|137-146||||F|||201012010905|IM^|8035^COX^CATHERINE(IM)

【问题讨论】:

  • 你的预期输出是什么?
  • 我的最终目标是在每个 PV1 段之前添加提取的 MSH 段。
  • 不回答这个问题,但是there's a library for parsing HL7 in Java时为什么要依赖正则表达式?
  • 不要发明正则表达式解析器,除非您正在构建玩具工具或仅在安全可预测受控环境中使用的工具 (some further discussion)
  • HAPI 解析器抛出异常,因为 PV1 需要 MSH。因此我需要在每个 PV1 之前添加 MSH 段 - 将每个这样的 HL7 消息传递给 HAPI 解析器。

标签: regex hl7


【解决方案1】:

可以使用库jar:hapi-base.2.0.jar

使用 ca.uhn.hl7v2.util.Terser 类,您可以获得所需的报告片段。

public Message processMessage(Message theIn) throws ApplicationException,
            HL7Exception {

        theIn = (ORU_R01) new PipeParser(new CanonicalModelClassFactory("2.3"))
                .parse(theIn.encode());

        System.out.println(theIn.printStructure());//for debug better
        Terser menssageParsed = new Terser(theIn);
        String sResp = menssageParsed.get("/.RESPONSE/ORDER_OBSERVATION/OBR-3-1");
}

但是,如果您想在报告中创建新细分或进行编辑。你可以使用这个类

ca.uhn.hl7v2.model.Message; ca.uhn.hl7v2.model.结构;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多