我有一段文本,由不同的正则表达式分隔符组成,后跟着文本。在这个例子中,我有三个正则表达式分隔符(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...
}
备注:
- 模式之间是互斥的。
- 字符串始终以至少一个模式开头。
split(pattern)
,请使用private static final Pattern
,因为String.split(String)
每次被调用时都会创建一个新的Pattern
对象,在循环中这是代价高昂的。 - Bobulous((PatternA)|(PatternB)|(PatternC))
。然而,这些模式是否互斥并不清楚,或者是否存在一个字符串可以匹配其中两个模式也不清楚。同样不清楚的是,在某个位置上没有任何模式匹配时是否要进行“碰撞”。 - nhahtdh