gpt4 book ai didi

java - 在 java : lookbehind with specified length 中拆分字符串

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:46:14 29 4
gpt4 key购买 nike

我想在字母“K”或“L”之后拆分一个字符串,除非其中一个后跟字母“P”。同时希望在某个位置拆分字符串时,如果子串长度小于4则不拆分。例如:

- Input:
AYLAKPHKKDIV

- Expected Output
AYLAKPHK
KDIV

现在,我已经实现了在字母“K”或“L”之后拆分字符串,除非其中一个后跟字母“P”。我的正则表达式是 (?<=[K|R])(?!P) .

My result:
AYLAKPHK
K
DIV

但是,我不知道如何忽略子串长度小于4的分割位置。

My Demo

最佳答案

I hope not to split if the substring length less than 4

换句话说,你想要拥有

  1. previous 匹配(拆分)分隔为 current 至少包含 4 个字符的匹配,因此 ABCKABKKABCD会 split 成 ABCK|ABKK|ABCD不是但不是`ABCK|ABK|.....

  2. currentABCKAB 后至少有 4 个字符 split 后ABCK|AB会有 AB在长度小于 4 的末尾。

要达到第一个条件,您可以使用 \G它表示上一个匹配项的位置(如果还没有匹配项,则表示字符串的开头)。所以第一个条件可以看起来像 (?<=\G.{4,}) (警告:通常后视期望它处理的子正则表达式的明显最大长度,但由于某些原因 .{4,} 在这里工作,这可能是我现在使用的 Java 10 中添加的错误或功能。如果它提示它,你可以使用一些非常大的数字,它应该大于您在两次拆分之间期望的最大字符数,例如 .{4,10000000} )

第二个条件更简单,因为它只是 (?=.{4}) .

顺便说一句,你不想要 |[K|R]因为它代表文字,而不是 OR 运算符,因为默认情况下字符集中的任何字符都是替代选择。所以[K|R]代表K或者 |或者 R .使用 [KR]相反。

演示:

String text = "AYLAKPHKKKKKKDIVK123KAB";
String regex = "(?<=[KR])(?!P)(?<=\\G.{4,})(?=.{4})";
for (String s : text.split(regex)){
System.out.println("'"+s+"'");
}

输出:

'AYLAKPHK'
'KKKK'
'KDIVK'
'123KAB'

关于java - 在 java : lookbehind with specified length 中拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53316243/

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