在java中使用split方法时遇到问题

在java中使用split方法时遇到问题,java,regex,split,Java,Regex,Split,我有一个需要解析名称和版本的字符串列表,例如一些字符串如下所示: 应用程序名称1.2.5 AppName 7.8.b 应用程序名为7.0 我想要两个字符串列表,一个是应用程序名,另一个是版本号,所以一个列表是: 应用程序名称 AppName 应用程序名称 那么另一个列表就是 1.2.5 7.8.b 3.0 我尝试过使用空格来拆分字符串,但是如果名称始终位于索引0中,而版本始终位于索引1中,这将是最简单的。所以我尝试了“\\d”(按数字分割),但这并不像我想象的那样有效。任何帮助我们都将不胜感激,

我有一个需要解析名称和版本的字符串列表,例如一些字符串如下所示:

应用程序名称1.2.5
AppName 7.8.b
应用程序名为7.0

我想要两个字符串列表,一个是应用程序名,另一个是版本号,所以一个列表是:

应用程序名称
AppName
应用程序名称

那么另一个列表就是

1.2.5
7.8.b
3.0


我尝试过使用空格来拆分字符串,但是如果名称始终位于索引0中,而版本始终位于索引1中,这将是最简单的。所以我尝试了“\\d”(按数字分割),但这并不像我想象的那样有效。任何帮助我们都将不胜感激,提前感谢在这里拆分并不合适。尝试改用matcher,并使用该方法获取应用程序名称和版本

Pattern p = Pattern.compile("^(\\D*[^\\d\\s])\\s*(\\d.*)", Pattern.DOT_ALL);
Matcher m = p.matcher(myString);
if (m.find()) {
  String appName = m.group(1);
  String versionNumber = m.group(2);
  ...
}
要了解正则表达式的工作原理,请查看以下内容:

^
表示从一开始就开始匹配

(
启动将保存版本名的组1

\\D*
它以任意数量的非数字开头

[^\\d\\s]
并以既不是数字也不是空格的东西结束

)
第1组结束

\\s*
可能与版本号之间有零个或多个空格

(

组2包含版本号

\\d
它以一个数字开头

.*
并继续其余的输入

)
结束。

尝试使用
“(?=\\d)”

这是一个空格,后跟一个未使用的数字(通过零宽度正向前瞻)