首页 > 解决方案 > 用于以版本格式提取数字的正则表达式

问题描述

我将从字符串中提取数字。数字代表一个版本。这意味着,我将匹配介于以下之间的数字:

我准备了以下正则表达式,但它没有按预期工作:

.*[\/_](\d{1,2}[.]\d{1,2}[.]\d{1,2})\/.*

对于以下示例,正则表达式应匹配两次:

输入:name_1.1.1/9.10.0/abc。预期结果:1.1.1and 9.10.0 ,但我的正则表达式只返回9.10.0,1.1.1被省略。你知道有什么问题吗?

标签: javaregex

解决方案


您可以在_or上拆分字符串/,然后保留看起来是版本的组件:

List<String> versions = new ArrayList<>();
String input = "name_1.1.1/9.10.0/abc";
String[] parts = input.split("[_/]");
for (String part : parts) {
    if (part.matches("\\d+(?:\\.\\d+)*")) {
        versions.add(part);
    }
}

System.out.println(versions);  // [1.1.1, 9.10.0]

推荐阅读