使用Java Pattern的字符串分隔符

时间:2013-05-19 23:57:38

标签: java regex delimiter

我有这个字符串,它喜欢使用Java Pattern分隔。第一行后面还有一个回车符。分隔符是|

MSH|^~\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||
EVN|A03

我使用了以下代码。

Pattern pattern = Pattern.compile("([^|]++)*");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
   System.out.println("Result: \"" + matcher.group() + "\"");
}

这样做基本上会为每个分隔符字符显示空字符。我想发现忽略这些。任何修改正则表达式的机会都可以忽略这些字符。

提前致谢。

2 个答案:

答案 0 :(得分:3)

我相信String#split()更符合您的需求:

String src = "MSH|^~\\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||\r\nEVN|A03\r";;
String[] ss = src.split("\\|+");
for (String s : ss) {
    System.out.println(s);
}

输出:

MSH
^~\&
Unicare^HL7CISINV10.00.16^L
IBA
ADT^A03
3203343722
P
2.3.1
                                 <--- there is a \r\n in the string at this point
EVN
A03

如果您想使用Pattern,可以使用正则表达式[^|]+

String str = "MSH|^~\\&|Unicare^HL7CISINV10.00.16^L||IBA||||ADT^A03|3203343722|P|2.3.1|||||\r\nEVN|A03\r";;
String[] ss = str.split("\\|+");
for (String s : ss) {
    System.out.println("Split..: \"" + s + "\"");
}
Pattern pattern = Pattern.compile("[^|]+");
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
   System.out.println("Pattern: \"" + matcher.group() + "\"");
}

输出(两者完全相同):

Split..: "MSH"
Split..: "^~\&"
Split..: "Unicare^HL7CISINV10.00.16^L"
Split..: "IBA"
Split..: "ADT^A03"
Split..: "3203343722"
Split..: "P"
Split..: "2.3.1"
Split..: "
EVN"
Split..: "A03
"
Pattern: "MSH"
Pattern: "^~\&"
Pattern: "Unicare^HL7CISINV10.00.16^L"
Pattern: "IBA"
Pattern: "ADT^A03"
Pattern: "3203343722"
Pattern: "P"
Pattern: "2.3.1"
Pattern: "
EVN"
Pattern: "A03
"

答案 1 :(得分:1)

这个正则表达式不起作用。写++时你想做什么? *量词 对群组有效,仅对字符和字符类有用。