字符串拆分特定元素

时间:2015-04-10 20:40:19

标签: java regex

我需要将以下字符串仅拆分为“CHAR”标签之间的数据:

输入:

<MSG><KEY>name.extObject</KEY><PARAM><CHAR>Number</CHAR><CHAR>7015:188188</CHAR></PARAM></MSG>

预期输出:Number 7015:188188

我正在寻找有效率的东西。

任何建议?

由于

5 个答案:

答案 0 :(得分:1)

avoid parsing XML/HTML with regex是一种好习惯。相反,你可以使用适当的XML解析器?我喜欢使用jsoup所以这里有一个例子,说明如何使用这个libraryL:

String data = "<MSG><KEY>name.extObject</KEY><PARAM><CHAR>Number</CHAR><CHAR>7015:188188</CHAR></PARAM></MSG>";

Document doc = Jsoup.parse(data, "", Parser.xmlParser());
String charText = doc.select("CHAR").text();

System.out.println(charText);

输出:Number 7015:188188

答案 1 :(得分:0)

我认为你的意思是捕获标签之间的内容,而不是分割字符串。

众所周知,你应该使用正则表达式解析xhtml,因为你可以获得w͈̦̝͉̬͔͕͡e̴͏̰̜͖̗̤̙̖̕i̧̩̭̳̖̦͠ŗ̴̼̺̻͕d̶̶̩̖̦̖̣̺̫̩̖̦̖̣̺̫͘͘c͕̻̫͉̞͝o̯̗͜͜͝ṇ̠͘t̛̬̮̞̥͕̙̞e̷̸̗̼͟n̡͎̖̜͟͢t̨̙̫̻̺͈̗͝。虽然,如果你仍然想要一个正则表达式,你可以使用这样的正则表达式:

<CHAR>(.*?)<\/CHAR>

<强> Working demo

你可以拥有这个java代码:

String line = "<MSG><KEY>name.extObject</KEY><PARAM><CHAR>Number</CHAR><CHAR>7015:188188</CHAR></PARAM></MSG>";
Pattern pattern = Pattern.compile("<CHAR>(.*?)<\\/CHAR>");
Matcher matcher = pattern.matcher(line);

String result = "";
while (matcher.find()) {
    result += matcher.group(1) + " ";
}
System.out.println(result); //Prints: Number 7015:188188

更新:正如 Pshemo 在他的评论中指出:

  

/不是Java正则表达式引擎中的特殊字符。你不必逃避它

所以,你可以使用:

Pattern pattern = Pattern.compile("<CHAR>(.*?)</CHAR>");

顺便说一句,我真的很喜欢Pshemo answer,如果没有正则表达式和xhtml,这是一个很好的解决方法

答案 2 :(得分:0)

如果你知道标签值总是某个数字,那么带有数字的可选冒号,并且它是唯一具有这样一个数值的<CHAR>标签,你可能想要使用这个正则表达式:

 (?<=<CHAR>)\d+(?::\d+)?(?=<\/CHAR>)

Java字符串:

 String pattern = "(?<=<CHAR>)\\d+(?::\\d+)?(?=</CHAR>)";

示例代码:

String str = "<MSG><KEY>name.extObject</KEY><PARAM><CHAR>Number</CHAR><CHAR>7015:188188</CHAR></PARAM></MSG>";
Pattern ptrn = Pattern.compile("(?<=<CHAR>)\\d+(?::\\d+)?(?=</CHAR>)");
Matcher matcher = ptrn.matcher(str);
if (matcher.find()) {
   System.out.println(matcher.group(0));
}

输出:

7015:188188

答案 3 :(得分:0)

String s = inputString;
String result="";
while(s.indexOf("<CHAR>") != -1)
{
    result += s.substring(s.indexOf("<CHAR>") + "<CHAR>".length(), s.indexOf("</CHAR>")) + " ";
    s = s.substring(s.indexOf("</CHAR>") + "</CHAR>".length());
}

//result is now the desired output

答案 4 :(得分:0)

正则表达式是:(。*?)&lt; / CHAR&gt;

但是,最好使用XML解析器。