You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java正则表达式拆分CFG字符串问题求助

解决CFG字符串按非终结符拆分的正则问题

我明白你遇到的问题了——你想把CFG格式的字符串里的非终结符(<xxx>)和普通文本拆分开,但当前用的正则只在<前面分割,导致非终结符后面的文本被粘在了一起。让我来帮你搞定这个!

问题根源

你用的str.split("(?=<)")是正向零宽断言,只会在<符号的前面位置进行分割,所以<animal>后面的 loves to会和<animal>被分到同一个元素里,达不到你想要的拆分效果。

解决方案

我们需要同时在两个位置分割:<的前面,以及>的后面。可以用同时包含正向和反向零宽断言的正则表达式:

String str = "The <animal> loves to <activity>.";
String[] result = str.split("(?=<)|(?<=>)");

运行结果

执行这段代码后,result数组的内容就是你期望的:

  • "The "
  • "<animal>"
  • " loves to "
  • "<activity>"
  • "."

正则表达式解释

让我们拆解一下这个正则(?=<)|(?<=>):

  • (?=<):正向零宽断言,匹配一个位置,这个位置的后面紧跟<,在这个位置分割
  • (?<=>):反向零宽断言,匹配一个位置,这个位置的前面是>,在这个位置分割
  • |:逻辑或,意味着只要满足其中一个条件就进行分割

额外提示

如果你的非终结符是严格的<xxx>格式(没有嵌套的<>),这个正则完全够用。如果遇到嵌套场景,可能需要更复杂的正则处理,但针对你当前的需求,这个方案完美适配。

内容的提问来源于stack exchange,提问作者Cybergenik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:30:35