java - 仅当负前瞻和负后瞻都被统计时才拆分字符串
问题描述
您好,我遇到了作者想要转换字符串的 问题:
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 时它才不匹配,因此您可以将多个单词链接在一起而不会在它们之间拆分。我发现了关于这个主题的另一个问题,但我无法针对这种特殊情况对其进行逆向工程。这可能吗?
解决方案
您可以使用
String[] results = exampleString.split("(?<=\\d)\\s+(?=[a-zA-Z])|(?<=[a-zA-Z])\\s+(?=\\d)|(?<=\\d)\\s+(?=\\d)");
查看正则表达式演示
细节
(?<=\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
推荐阅读
- python-3.x - 如何将列表值与单个 csv 文件的行匹配?
- signalr - 使用 SignalR 时如何确保事件不会丢失
- python - matplotlib:条形图动画只能工作一次
- java - 从 AWS Lambda 连接到 MongoDB Atlas 需要很长时间
- django - 为什么我的 Django 密码没有被加密?
- swift - 如何使按钮正确缩放我的图像
- c++ - 有没有办法从 C++ 目录中找到最后修改的文件?
- sql - 如何以文本方式指示 SQL SELECT 中没有结果?
- javascript - 'fetch' Response.status 和 Response.ok,移动浏览器是否支持它们?
- wsdl - WSDLException faultCode=PARSER_ERROR - 使用 schemaLocation 时:MyService?xsd=myschema.xsd