gpt4 book ai didi

java - 多模式字符串拆分

转载 作者:搜寻专家 更新时间:2023-11-01 03:50:10 25 4
gpt4 key购买 nike

我有一个文本,由不同的正则表达式分隔符组成,后跟文本。在此示例中,我有 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...
}

备注:

  • 模式是互斥的。
  • 字符串总是以至少一种模式开头。

最佳答案

您可以使用循环并在代码块内“吃掉”您在文本开头找到的内容。通过这种方式,每次迭代解析都非常简单且可维护/可扩展。

简单的规则是:吃掉你发现的东西并加工它。

类似这样的东西

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 这样的解析器生成器)。

关于java - 多模式字符串拆分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30832258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com