2017-02-22 12 views
1

私は区切り文字として閉じ括弧付き正規表現を使用して文字列を分割し、ブラケットを維持する必要がありますしようとしています。..javaのブラケットにより分割し、delmiterを保つ - 正規表現

i/p String: (GROUP=test1)(GROUP=test2)(GROUP=test3)(GROUP=test4) 

needed o/p: 
(GROUP=test1) 
(GROUP=test2) 
(GROUP=test3) 
(GROUP=test4) 

私はJavaの正規表現を使用しています - 「\([^)] *?\)」と、それはerror..Belowは私がグループを取得しようとしたとき、私はそのエラーを投げて、使用していたコードである私を投げます。..

Pattern splitDelRegex = Pattern.compile("\\([^)]*?\\)"); 
    Matcher regexMatcher = splitDelRegex.matcher("(GROUP=test1)(GROUP=test2) (GROUP=test3)(GROUP=test4)"); 
    List<String> matcherList = new ArrayList<String>(); 
    while(regexMatcher.find()){ 
     String perm = regexMatcher.group(1); 
     matcherList.add(perm); 
    } 

任意のヘルプは高く評価されています。ありがとう

+0

どのようなエラーが表示されますか? – Encaitar

+0

私はグループ(1)が見つかりませんでしたエラー:( – marc

答えて

2

あなたは、単に正規表現全体を括弧で囲むキャプチャ入れるのを忘れていました。あなたはまったく何もキャプチャされていません。ただ、

Pattern splitDelRegex = Pattern.compile("(\\([^)]*?\\))"); 
             ^  ^ 
に正規表現を変更

私はEclipseでこれをテストし、あなたの出力を得ました。

+0

予想通り働いています。 – marc

-1

あなたが閉じ括弧を欠いているので、その後にそれらをバック追加することができます知っているだろう文字列の配列を返しますSE

str.split(")") 

。 Thatsははるかに簡単で、エラーの傾向が少ないようです。

-1

あなたは、この行を変更してみてください。これに

String perm = regexMatcher.group(1); 

を:

String perm = regexMatcher.group(); 

だから、あなたが最後に見つかったグループをお読みください。

+0

私はこれをテストし、うまくいきませんなぜ私はdownvotedを得たかわからない – jambriz

-1

なぜ文字列を分割する必要があるのか​​わかりません。あなたは正規表現で括弧で囲まれた各グループを捕捉することができます。

この正規表現を試してください(\\([a-zA-Z0-9=]*\\))私はキャプチャグループ()を持っていて、\\(で始まり、[a-zA-Z0-9=]が0または何度も入っていて、*という文字を含み、リテラルが\\)で終わるテキストを探します。これはかなり緩やかな正規表現です。大括弧内のテキストが予測可能な場合は、マッチを強化することができます。

String input = "(GROUP=test1)(GROUP=test2)(GROUP=test3)(GROUP=test4)"; 
String regex = "(\\([a-zA-Z0-9=]*\\))"; 
Pattern pattern = Pattern.compile(regex); 
Matcher matcher = pattern.matcher(input); 

while(matcher.find()) { // find the next match 
    System.out.println(matcher.group()); // print the match 
} 

出力:

(GROUP=test1) 
(GROUP=test2) 
(GROUP=test3) 
(GROUP=test4) 
-1

はそれを分割する主張の背後にあるデザインを使用。 "(?<=\\))"
アサーションが存在するの間に、実際には文字ではありません。

結果は、それが)の間を分割である(そして、あなたはすべてのテキストを取得します。

しかし注意してください、それはあなたが期待するもの
を与えないことがあり、それが見つかったすべての)、後に分割します。

関連する問題