2014-02-27 106 views
2

我想將這個正則表達式模式2 numbers-3 numbers-5 numbers and letter分爲兩部分。數字和「 - 」一個數組和第二個數組中的字母。Java拆分正則表達式模式字母和數字

我一直想弄清楚一段時間。希望我能得到一些幫助。

下面是一個例子

"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"] 

回答

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

+0

這工作真的很好,但我想知道如果我可以限制格式?所以''12-123-123A''不會進行拆分並返回一個空數組。 – AirWick219

+0

@ AirWick219,看起來像'Matcher.find'更適合你。看到這個:http://ideone.com/fsmvnE – falsetru

+0

匹配將是偉大的,但拆分也是''12-123-12345「'沒有在這種情況下的信件我想它只返回[」12-123- 12345「] – AirWick219

1

嘗試這種

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

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

您可以測試它這個網站上

http://regexpal.com/

這裏是java代碼。注意雙斜線代替斜槓\ - > \\

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 
    } 
} 
+0

我最初得到了「^ \ d {2} - \ d {3} - \ d {5}」的一個匹配,但我猜想在java中它是不同的? – AirWick219

+0

@ AirWick219在java中猜測你需要將單斜槓變成雙斜槓。我添加了上面的代碼 – jcalloway