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

发布于 2024-11-14 20:27:44 字数 340 浏览 1 评论 0原文

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

App Name 1.2.5
应用程序名称 7.8.b
应用程序名称 7.0

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

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

那么其他列表将为

1.2.5
7.8.b
3.0

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

I have a list of strings that I need to parse for the name and version, for example some strings look like this:

App Name 1.2.5
AppName 7.8.b
The App Name 7.0

I want to have two list of Strings one with the app name and one with the version number so one list is:

App Name
AppName
The App Name

Then the other list will be

1.2.5
7.8.b
3.0

I have tried just using a space to split the strings, but it would be easiest if the name was always in index 0 and the version is always in index 1. So I tried "\\d" (split by digits), however that didn't work like I thought it was. Any help would be appreciated, and thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

只有一腔孤勇 2024-11-21 20:27:44

分裂在这里不太合适。尝试使用匹配器并使用 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

它以数字开头

.*

,并继续输入的其余部分。

)

结束。

Split isn't really appropriate here. Try using a matcher instead and use the group method to get the app name and version.

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);
  ...
}

To understand how the regular expression works, take a look at the below:

^

means start matching at the start

(

starts group 1 which will hold the version name

\\D*

which starts with any number of non-digits

[^\\d\\s]

and ends with something that is neither a digit nor a space.

)

end of group 1

\\s*

which might be separated from the version number by zero or more spaces.

(

Group 2 contains the version number.

\\d

It starts with a digit

.*

and continues the rest of the input.

)

The end.

心如狂蝶 2024-11-21 20:27:44

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

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

Try with " (?=\\d)"

that is a space followed by an digit which is not consumed (via zero-width positive lookahead)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文