Java分裂正则表达式模式字母和数字

时间:2014-02-27 07:17:11

标签: java regex

我想将此正则表达式模式2 numbers-3 numbers-5 numbers and letter拆分为两部分。数字和“ - ”一个数组和第二个数组中的字母。

我一直想弄清楚。希望我能得到一些帮助。

这是一个例子

"12-123-12345A"    <----- the string 
// I want to split it such that it can be ["12-123-12345","A"]

我试过这个

"\\d{2}-\\d{3}-\\d{5}" 
// that only give me ["", "A"]

和这个

"(?<=\\D)(?=\\d)|(?<=\\d)(?=\\D)"
// ["12", "-", "123", "-", "12345", "A"]

3 个答案:

答案 0 :(得分:4)

\D匹配任何非数字字符(包括-)。您最好使用[^-\d]来排除-

String s = "12-123-12345A";
String parts[] = s.split("(?<=\\d)(?=[^-\\d])");
System.out.println(parts[0]); // 12-123-12345
System.out.println(parts[1]); // A

观看演示:http://ideone.com/emr1Kq

答案 1 :(得分:1)

试试这个

String[] a = "12-123-12345A".split("(?<=\\d)(?=\\p{Alpha})");

答案 2 :(得分:0)

(适用\ d {2} - \ d {3} - \ d {5})(\ w)的

您可以在本网站上进行测试

http://regexpal.com/

这是java代码。注意用斜杠代替斜杠\ - &gt; \\

package com.company;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

// http://stackoverflow.com/questions/22061614
public class Main {

    public static void main(String[] args) {
      Pattern regex = Pattern.compile("(\\d{2}-\\d{3}-\\d{5})(\\w)");
      Matcher matcher = regex.matcher("12-123-12345A");
      matcher.find();
      System.out.println(matcher.group(1));
      System.out.println(matcher.group(2));
    // write your code here
    }
}