您好,我来了this question,作者想将String转换为:
exampleString = "2 Marine Cargo 14,642 10,528 Denver Factory North 16,016 more text 8,609 argA 2,106 argB"
变成看起来像这样的数组/列表:
String[] resultArray = {"2", "Marine Cargo", "14,642", "10,528", "Denver Factory North", "16,016",
"more text", "8,609", "argA", "2,106", "argB"};
因此,数字部分(带或不带逗号)被视为元素
和纯alpha序列(除以一个,一个或多个空格)被视为一个元素。
可以通过匹配组来完成
或通过分割字符串的上一部分和下一部分都不为alpha序列的空格。我很好奇后者是否可能。
我认为应该以消极的眼光看待部分工作:
\s+(?![A-Za-z]+)
并带有负面的看法。
(?<![a-zA-Z])\s+
我希望以这样一种方式组合两个语句,即,如果空格序列之前和之后的两个部分均为字母,那么它就不会匹配,因此您可以将多个单词链接在一起而不在它们之间进行分割。我在此主题上找到了另一个question,但是对于这种特殊情况,我无法对其进行反向工程。这可能吗?
最佳答案
您可以使用
String[] results = exampleString.split("(?<=\\d)\\s+(?=[a-zA-Z])|(?<=[a-zA-Z])\\s+(?=\\d)|(?<=\\d)\\s+(?=\\d)");
请参见regex demo
细节
(?<=\d)\s+(?=[a-zA-Z])
-1+个空格,左边有一个数字,右边有一个字母|
-或(?<=[a-zA-Z])\s+(?=\d)
-1+个空格,左边有一个字母,右边有一个数字|
-或(?<=\d)\s+(?=\d)
-1+个空格,左边有一个数字,右边有一个数字。Java demo:
String exampleString = "2 Marine Cargo 14,642 10,528 Denver Factory North 16,016 more text 8,609 argA 2,106 argB";
String results[] = exampleString.split("(?<=\\d)\\s+(?=[a-zA-Z])|(?<=[a-zA-Z])\\s+(?=\\d)|(?<=\\d)\\s+(?=\\d)");
for (String s: results) {
System.out.println(s);
}
输出:
2
Marine Cargo
14,642
10,528
Denver Factory North
16,016
more text
8,609
argA
2,106
argB
关于java - 仅当同时满足负向前瞻和负向后瞻时才拆分字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56600148/