我一直在尝试使用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
我尝试了许多其他正则表达式,但没有成功(我相信这证明了我和正则表达式的初学者有多少......)有人可以帮助我吗?
注意:我认为为我的数据编写自己的拆分方法并不困难,也许它在性能方面要好得多,但我真的很想了解如何做到这一点使用正则表达式。
答案 0 :(得分:1)
如果你想保留单个空格,但是在2 +空格上分割,表达式如下:
data= s.split("\\s*\\:\\s*|\\s{2,}");
这会产生您需要的输出(demo):
My name is
John Smith
13
75,5
答案 1 :(得分:1)
"\\s*\\:\\s*|\\s+|\\s+"
|
字符不符合您的意图。它们充当“或”,因此在您的情况下,您的正则表达式将\\s+
与单词之间的空格匹配,因为虽然它们与正则表达式的第一部分不匹配,但它们肯定与第二部分(和第三部分)匹配。
更好的解决方案是这样的:
"\\s*\\:\\s*|\\s{2,}"