使用正则表达式替换基于特殊字符出现的字符串

时间:2015-01-30 11:09:10

标签: java regex

我有一个消息字符串,用不同的特殊字符分隔。例如,

MSG|027052^CMXV~MB^M^1^2^MD~GUY^M^1^2^MD|O|^1^2^STD||||027052^SCHROPP~GUY^M^^^MD

现在根据用户输入,

-> 1(1).1 - Means in this string first occurrence of '|'(Occurrence of '~').Occurence of '^' -> O/P: M
-> 1(1) - Means in this string first occurrence of '|'(Occurrence of '~') -> O/P: GUY^M^1^2^MD
-> 1 - Means in this string first occurrence of '|' -> O/P: 027052^CMXV~MB^M^1^2^MD~GUY^M^1^2^MD

现在输入可以是三个中的一个。现在我必须用其他字符串替换找到的一串字符串(例如{I:1(1)} O:GUY ^ M ^ 1 ^ 2 ^ MD)。

以下是只提供管道分隔的正则表达式的代码。

String originalMsg = "MSG|027052^CMXV~MB^M^1^2^MD~GUY^M^1^2^MD|O|^1^2^STD||||027052^SCHROPP~GUY^M^^^MD";

String msg = originalMsg.replaceAll("^((?:[^|]*\\|){1})[^|]*", "$1ABC" );

O/P: MSG|ABC|O|^1^2^STD||||027052^SCHROPP~GUY^M^^^MD

修改

String msg = originalMsg.replaceAll("^((?:[^|]*\\|){1}([^~]+.){2}))[^|]*", "$1ABC" );

O/P: MSG|027052^CMXVABC|O|^1^2^STD||||027052^SCHROPP~GUY^M^^^MD

它只会取代' |'分开的字符串我想要一个根据用户输入替换的镜头策略。

1 个答案:

答案 0 :(得分:2)

请勿尝试手动执行此操作并使用正则表达式。使用HL7解析库。一个很好的Java开源库是HAPI。您可以将HL7消息解析为对象,您可以在其中访问字段并更改其值。

访问这些值的语法似乎也不符合HL7寻址消息字段的标准。可能还想了解一下HL7标准。它们应该可以从HL7 organisation website

免费下载

明确地记住 - 永远不要写自己的HL7解析器,你会用脚射击自己。