我有一个文本,由不同的正则表达式分隔符组成,后跟文本。 在这个例子中,我有3个正则表达式分隔符(PatternA,B,C),文本如下所示:
| ..StringMatchingA .. | ..Text1 .. | ..StringMatchingB .. | ..Text2 .. | ..StringMatchingA .. | ..Text3 .. | ..StringMatchingC .. | ..Text4。 。|
我正在寻找一种有效的Java解决方案来提取信息作为三元组列表:
{PatternA, StringMatchingA, Text1}
{PatternB, StringMatchingB, Text2}
{PatternA, StringMatchingA, Text3}
{PatternC, StringMatchingC, Text4}
有了这些信息,我知道每个三元组,匹配的模式是什么,以及匹配它的字符串。
目前,我有这种方法,但我想我可以使用高级正则表达式使用更有效的方法吗?
String pattern = "?=(PatternA|PatternB|PatternC)";
String()[] tokens = input.split(pattern);
for(String token : tokens)
{
//if start of token matches patternA ...
//elseif start of token matches pattern B...
//etc...
}
备注:
答案 0 :(得分:0)
您可以使用循环并在代码块内部“吃掉”您在文本开头找到的内容。 通过这种方式,在每次迭代时,解析都非常简单且可维护/可扩展。
简单的规则是:吃你发现的东西并处理它。
像这样的东西
String chunk;
while(text.size() >0 {
chunk = eat(text,pattern1);
if (chunk.lengh()>0}{
...
continue;
}
chunk = eat(text,pattern2);
if (chunk.lengh()>0}{
...
continue;
}
}
出于性能原因,你必须在进入循环之前编译正则表达式模式。
(考虑使用像ANTLR这样的解析器生成器。)