【问题标题】:Regex split numbers and letter groups without spaces正则表达式拆分没有空格的数字和字母组
【发布时间】:2012-06-27 18:32:52
【问题描述】:

如果我有一个像“11E12C108N”这样的字符串,它是字母组和数字组的串联,如何在没有分隔符空格字符的情况下拆分它们?

例如,我希望得到的拆分为:

tokens[0] = "11"
tokens[1] = "E"
tokens[2] = "12"
tokens[3] = "C"
tokens[4] = "108"
tokens[5] = "N"

我现在有这个。

public static void main(String[] args) {

    String stringToSplit = "11E12C108N";

    Pattern pattern = Pattern.compile("\\d+\\D+");
    Matcher matcher = pattern.matcher(stringToSplit);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }
}

这给了我:

11E
12C
108N

我可以让原始正则表达式一次性完成拆分吗?不必在中间标记上再次运行正则表达式?

【问题讨论】:

    标签: java regex


    【解决方案1】:

    使用以下正则表达式,并获取所有匹配项的列表。这就是您要寻找的。​​p>

    \d+|\D+
    

    在 Java 中,我认为代码看起来像这样:

    Matcher matcher = Pattern.compile("\\d+|\\D+").matcher(theString);
    while (matcher.find())
    {
        // append matcher.group() to your list
    }
    

    【讨论】:

      【解决方案2】:

      您也可以在拆分正则表达式中使用“环顾四周”

      String stringToSplit = "11E12C108N";
      String[] tokens = stringToSplit .split("(?<=\\d)(?=\\D)|(?=\\d)(?<=\\D)");
      System.out.println(Arrays.toString(tokens));
      

      出来 [11, E, 12, C, 108, N]

      想法是在数字 (\d) 和非数字 (\D) 之间的位置进行拆分。换句话说,它是地方(空字符串)有:

      • (?&lt;=\d) 之前的数字和(?=\D) 之后的非数字
      • (?&lt;=\D) 之前的非数字和(?=\d) 之后的数字

      有关(?&lt;=..) 和(?=..)(以及更多)的更多信息,请访问http://www.regular-expressions.info/lookaround.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-12
        • 1970-01-01
        • 2015-10-01
        • 2010-09-15
        • 2022-01-14
        相关资源
        最近更新 更多