2012-06-27 15 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

次の正規表現を使用して、すべての一致のリストを取得します。それはあなたが探しているものになります。 Javaでは

\d+|\D+ 

、私は、コードは次のようになりますと思う:

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

ます。また、分割正規表現で [11, E, 12, C, 108, N]

アウト

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

を "見回す" を使用することができます

アイデアは、数字の間にある場所で分割することです(\d)と非数字(\D)です。言い換えれば、それは持っている場所(空の文字列)は次のとおりです。

  • (?<=\d)と非数字の前にした後、それ(?=\D)
  • 非桁(?<=\D)と数字の前にそれが(?=\d)

詳細情報の後約(?<=..)(?=..)(それ以上の数)はhttp://www.regular-expressions.info/lookaround.htmlにあります。

関連する問題