【发布时间】: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 解析器。