我需要将以下字符串仅拆分为“CHAR”标签之间的数据:
输入:
<MSG><KEY>name.extObject</KEY><PARAM><CHAR>Number</CHAR><CHAR>7015:188188</CHAR></PARAM></MSG>
预期输出:Number 7015:188188
我正在寻找有效率的东西。
任何建议?
由于
答案 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解析器。