所以我有这个代码用于演示目的:
String input = "abcRANDOM STRINGabc";
String arr[] = input.split("abc");
System.out.println(Arrays.toString(arr));
// output: [, RANDOM STRING]
arr = input.split("(?=(abc))|(?<=(abc))");
System.out.println(Arrays.toString(arr));
// output: [abc, RANDOM STRING, abc]
arr = input.split("(?=([abc]+))|(?<=([abc]+))");// wrong syntax
System.out.println(Arrays.toString(arr));
// output: [a, b, c, RANDOM STRING, a, b, c]
第一个将根据“abc”的精确匹配进行拆分,但不会返回导致空单元格的匹配。
第二个将在“abc”完全匹配时拆分,但不会丢失匹配。
我想要第三个版本的修改版本或完全不同的版本,并且不会丢失无限量的 [abc] 序列。
例如,如果我有这个字符串“aaaaabbRANDOMSTRINGabcabc” 预期输出:[aaaaabb,RANDOMSTRING,abcabc]
最佳答案
这有效:
String input = "aaaaabbRANDOMSTRINGabcabc";
String arr[] = input.split("(?<=[abc])(?![abc])|(?<![abc])(?=[abc])");
System.out.println(Arrays.toString(arr));
// output: [aaaaabb, RANDOMSTRING, abcabc]
您的 split 点如下:
- 前面是
[abc]
,后面没有[abc]
或 - 前面没有
[abc]
,后面是[abc]
。
关于基于Java split的精确正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48668834/