你好,我来了 this question作者想要转换字符串的地方:
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 序列(不除、不除一个或多个空格)被视为一个元素。
这可以通过匹配组来完成
或者通过在字符串的前一部分和下一部分都不是字母序列的空格上进行分割。我很好奇后者是否可能。
我认为部分应该以消极的眼光来完成:
\s+(?![A-Za-z]+)
并以消极的眼光看待后面的部分。
(?<![a-zA-Z])\s+
我希望以这样的方式组合这两个语句,只有当空格序列之前和之后的部分都是 alpha 时,它才不匹配,这样您就可以将多个单词链接在一起而无需拆分之间。我找到了另一个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+ 个空格,左侧各有一个数字,右侧各有一个数字。
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/