【问题标题】:Having trouble using regular expressions with the split method in java在 java 中使用 split 方法使用正则表达式时遇到问题
【发布时间】:2011-06-10 23:14:07
【问题描述】:

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

应用名称 1.2.5
应用名称 7.8.b
应用名称 7.0

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

应用名称
应用名称
应用名称

那么另一个列表将是

1.2.5
7.8.b
3.0

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

【问题讨论】:

    标签: java regex split


    【解决方案1】:

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

    以数字开头

    .*
    

    并继续输入的其余部分。

    )
    

    结束。

    【讨论】:

      【解决方案2】:

      试试" (?=\\d)"

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多