我需要拆分包含带标签的部分的字符串。例如:按标签将字符串拆分成不同的变量
String str = "This text is not highlighted <hlTag>but this is</hlTag> this"
+ " isn't again <hlTag>and this is</hlTag>";
的问题是,各部分应(在这个例子中,我只是把它们打印出来)保存到不同的变量,所以我的解析器应该知道,这部分都标记内部,并没有。
我已经有解决方案,它的工作原理,但我使用两个正则表达式在这两种情况下,我认为它可以简化,所以我要求你的帮助做到这一点。
EDITED
我意识到,我的解决方案是错误的 - 我松部分的顺序,我需要它得到尊重。如果突出显示,list.add(new HighlPart(text)),else list.add(new NonHighlPart(text)),我需要解析字符串一次并将零件保存到标记和非标记零件的不同对象中。
有人可以帮我吗?
String preTag = "<hlTag>";
String postTag = "</hlTag>";
Matcher insideTagsMatcher = Pattern.compile(preTag + "(.+?)" + postTag).matcher(str);
Matcher outsideTagsMatcher = Pattern.compile("^(.*?)" + preTag +
"|" + postTag + "(.*?)" + preTag +
"|" + "</hlTag>(.*?)$").matcher(str);
System.out.println("Highlighted:");
while (insideTagsMatcher.find()) {
System.out.println(insideTagsMatcher.group(1));
}
System.out.println("\nNot highlighted:");
while (outsideTagsMatcher.find()) {
for (int i = 1; i <= outsideTagsMatcher.groupCount(); i++) {
// each pattern group returns two nulls except of string we need
if (outsideTagsMatcher.group(i) != null)
System.out.println(outsideTagsMatcher.group(i));
}
}
结果是:
Highlighted: but this is and this is Not highlighted: This text is not highlighted this isn't again
正则表达式是一个糟糕的解析器,除了非常简单的语法。使用一个实际的解析器。 – Andreas