在java中使用正则表达式和split方法时遇到问题

时间:2011-06-10 23:14:07

标签: java regex split

我有一个字符串列表,我需要解析名称和版本,例如一些字符串看起来像这样:

App Name 1.2.5
AppName 7.8.b
App Name 7.0

我希望有两个字符串列表,一个带有应用程序名称,另一个带有版本号,所以一个列表是:

App Name
AppName的
应用名称

然后另一个列表将是

1.2.5
7.8.b
3.0

我曾尝试使用空格来分割字符串,但如果名称始终位于索引0且版本始终位于索引1中,则最简单。所以我尝试了“\\ d”(按数字分割)然而,这并没有像我想象的那样奏效。任何帮助将不胜感激,并提前感谢

2 个答案:

答案 0 :(得分:5)

斯普利特在这里并不合适。请尝试使用匹配器,并使用group方法获取应用名称和版本。

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

以数字

开头
.*

并继续输入其余部分。

)

结束。

答案 1 :(得分:0)

尝试使用" (?=\\d)"

这是一个空格,后跟一个不是消耗的数字(通过零宽度正向前瞻)