我一直在尝试使用java编程语言中的String.split()
方法从字符串中检索数据。我字符串中的数据格式很奇怪。让我给你举一个例子:假设我有以下字符串:
String s="My name is : John Smith 13 75,5";
我需要以这样一种方式拆分字符串,即:
之前的所有内容(除空格外(都转到一个字符串,然后,在剩下的内容中,第一个数字之前的所有信息(除空格以外(都转到另一个字符串中,然后第一个数字转到另一字符串中,最后一个数字转到其他字符串中,这样,考虑到我的示例中的String s
,我将得到以下输出:
My name is
John Smith
13
75,5
我尝试了以下代码:
data= s.split("\s*\:\s*|\s+|\s+");
但结果是:
My
name
is
John
Smith
13
75,5
我尝试过许多其他正则表达式,但都没有成功(我相信这证明了我对regex是一个多么初学者…(有人能帮我吗?
注意:我认为为我的数据编写自己的拆分方法不会太困难,也许它在性能方面要好得多,但我真的很想了解如何使用regex来实现这一点。
如果您想保留单个空格,但在2个以上的空格上进行拆分,则表达式如下所示:
data= s.split("\s*\:\s*|\s{2,}");
这会产生您需要的输出(演示(:
My name is
John Smith
13
75,5
"\s*\:\s*|\s+|\s+"
|
角色不会做你认为他们可能做的事情。它们的作用是"或",所以在您的情况下,正则表达式将\s+
与单词之间的空格匹配,因为虽然它们与正则表达式的第一部分不匹配,但它们肯定与第二部分(和第三部分(匹配。
更好的解决方案是这样的:
"\s*\:\s*|\s{2,}"