2012-06-27 56 views
6

如果我有一個像「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 

我可以做原來的正則表達式一氣呵成做一個完整的分裂?而不必再次在中間令牌上運行正則表達式?

回答

5

使用以下正則表達式,並獲取所有匹配的列表。這將是你在找什麼。

\d+|\D+ 

在Java中,我認爲該代碼會是這個樣子:

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

您還可以在拆分正則表達式使用 「東張西望」

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)。換句話說,它是地方(空字符串),其中有:

  • 位數(?<=\d)和非數字前,後(?=\D)
  • (?<=\D)和數字之前非數字後(?=\d)

更多信息約(?<=..)(?=..)(和更多),你可以在http://www.regular-expressions.info/lookaround.html

相關問題