拆分正则表达式以提取连续字符的字符串

2022-09-01 20:55:51

有没有一个正则表达式可以与String.split()一起使用,将字符串分解为连续的字符 - 即拆分,其中下一个字符与前一个字符不同?

下面是测试用例:

String regex = "your answer here";
String[] parts = "aaabbcddeee".split(regex);
System.out.println(Arrays.toString(parts));

预期输出:

[aaa, bb, c, dd, eee]

尽管测试用例仅将字母作为输入,但这只是为了清楚起见;输入字符可以是任何字符。


请不要提供涉及循环或其他技术的“变通办法”。

问题是为代码找到正确的正则表达式,如上所示 - 即仅使用而没有其他方法调用。这不是一个关于找到能够“完成工作”的代码的问题。split()


答案 1

完全可以通过一个步骤编写用于拆分的正则表达式:

"(?<=(.))(?!\\1)"

由于您希望在每组相同字符之间拆分,因此我们只需要查找2组之间的边界即可。我通过使用正面的后仰光来抓取前一个字符,并使用否定的向前看和向后引用来检查下一个字符是否不是同一个字符来实现这一点。

如您所见,正则表达式的宽度为零(只有 2 个环顾断言)。正则表达式不会消耗任何字符。


答案 2