2017-01-03 10 views
1

ここでは正規表現の質問のほとんどを見てきましたが、私の特定のケースには一致しません。私が欲しい"ABe(CD)(EF)GHi"カッコで文字列を分割する、カッコでグループ化する、Java

::私は試してみました"A", "Be", "(CD)", "(EF)", "G", "Hi"

.split("(?=[A-Z\\(\\)])"), which gives me: "A", "Be", "(", "C", "D", ")", "(", "E", "F", ")", "G", "Hi". 

任意のアイデアを

は、私は、文字列を持っていると言いますか?

答えて

5

これを試してみてください:

String input = "ABe(CD)(EF)GHi"; 

String[] split = input.split("(?=[A-Z](?![^(]*\\)))|(?=\\()|(?<=\\))"); 
System.out.println(Arrays.toString(split)); 

出力

[A, Be, (CD), (EF), G, Hi] 

はこれを試してみてください

(?=    Before: 
    [A-Z]   Uppercase letter 
    (?![^(]*\))  not followed by ')' without first seeing a '(' 
         i.e. not between '(' and ')' 
) 
|(?=    or before: 
    \(    '(' 
) 
|(?<=    or after: 
    \)    ')' 
) 
+0

これが働いていました。ありがとうございました:) – w1drose

0

について説明した。..

String array = "ABe(CD)(EF)GHi"; 
int i = 0; 

for(int j=0; j<array.length();) 
{ 
    if(Character.isUpperCase(array.charAt(i))) 
    { 
     j++; 
     System.out.println(array.substring(i, i+1)); 
     if(Character.isUpperCase(array.charAt(i+1))) 
     { System.out.println(array.substring(i+1, i+3)); 
      i = i+3; 
      j = j + 3; 
     } 
    } 
    else 
    { 
     System.out.println(array.substring(i+1, i+3)); 
     i = i+4; 
     j = j + 3; 
    } 
} 
+0

あなたのコードについて説明してください – Saveen

0

分割の代わりにマッチングを行います。

String s = "ABe(CD)(EF)GHi"; 
Pattern regex = Pattern.compile("\([^()]*\)|[A-Z][a-z]+|[A-Z]"); 
Matcher matcher = regex.matcher(s); 
while(matcher.find()){ 
     System.out.println(matcher.group(0)); 
} 

DEMO

+0

@WiktorStribiżew誰かがdupeと同じ質問を閉じました:-) –

+0

そう、あなたはそれをrepoenすることはできませんよね?私にチェックさせてください.. –

関連する問題