【问题标题】:Java regex split string after number [duplicate]数字后的Java正则表达式拆分字符串[重复]
【发布时间】:2014-08-17 09:48:49
【问题描述】:

抱歉,又是一个正则表达式问题!我有一个长度未知的字符串,其中包含以下模式:

"abc1defg2hijk23lmn19"

我需要拆分字符串以获得以下内容:

["abc1", "DefG2", "hiJk23", "lmn19"]

这很简单,我只需要每次在数字后拆分即可。该数字可以是任何非零数字。

我可以像这样进行积极的查找:

a.split("(?=\\d+)");

但是,这实际上是拆分数字而不是前面的字母组和数字。

我目前的尝试看起来像这样,但不起作用:

a.split("(?=[A-Za-z]+\\d+)");

【问题讨论】:

    标签: java regex


    【解决方案1】:

    所以输入

    abc1defg2hijk23lmn19
    

    你想找到标有|的地方

    abc1|defg2|hijk23|lmn19
    

    也就是说你想找到哪个地方

    • (?<=[0-9]) 之前有数字
    • (?=[a-zA-Z])之后的字母

    (我假设您熟悉look-around 机制)。

    在这种情况下使用

    split("(?<=[0-9])(?=[a-zA-Z])")
    

    表示数字和字母字符之间的位置,例如1|a,其中| 代表这样的位置。


    例子:

    String data ="abc1defg2hijk23lmn19";
    for (String s: data.split("(?<=[0-9])(?=[a-zA-Z])"))
        System.out.println(s);
    

    输出:

    abc1
    defg2
    hijk23
    lmn19
    

    【讨论】:

      【解决方案2】:

      您可以使用这个正则表达式 fpr 拆分:

      (?<=\\d)(?=\\D)
      

      Working Demo

      【讨论】:

        【解决方案3】:

        用数字+空格替换数字,然后按空格分割。

        a = a.replaceAll("[0-9]+","$1 ");
        String[] b = a.split(" ");
        

        如果您的字符串包含其他空格,也可以自定义它,方法是替换一个保证不会出现在您的字符串中的字符而不是空格。我最喜欢的是 (§)。

        【讨论】:

          猜你喜欢
          • 2011-10-16
          • 1970-01-01
          • 1970-01-01
          • 2018-06-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多