0

文字列から部分文字列を抽出する必要があります。

与えられた文字列: "< If( ( h == v ) ): { [ < j = (i - f) ;>, < k = (g + t) ;> ] }>" 2 つの部分文字列が必要です:"j = (i - f)""k = (g + t)".

このために、ユーザーパターンの正規表現を試しました。これが私のコードです:

Pattern pattern = Pattern.compile("[<*;>]");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group());
      }

out.get(i).toString() は私の入力文字列です。B2 は、抽出された 2 つの部分文字列を含む ArrayList です。

しかし、上記のコードを実行した後、得られる出力は :[<, <, ;, >, <, ;, >, >]です。

私のパターンがうまくいきません!よろしくお願いいたします。前もって感謝します!

4

2 に答える 2

1

式を使用できます<([^<]+);>

これは<と;>の間のものと一致します

Pattern pattern = Pattern.compile("<([^<]+);>");
Matcher matcher = pattern.matcher(out.get(i).toString());
while (matcher.find())
     {
        B2.add(matcher.group(1));
      }

結果はregexplanetで確認できます:http://fiddle.re/5rty6

于 2013-02-27T18:58:40.433 に答える
0

あなた[]あなたに問題を引き起こしています。これらの記号の意味:"match one among the symbols inside of these" これらを削除すると、より良い結果が得られます。それを行うときは、先のとがった角かっこもエスケープする必要があります。

次のステップは、グループをキャプチャすることです。あなたは通常それのために使用()ます。

<また、文字列の先頭にあるような、正規表現を台無しにする厄介なアーティファクトについても心配する必要があります。これに対処するには、正規表現からそれらを除外する必要があります。

あなたは

"\<([^<>]*?)\>"

あなたの正規表現として。必ず特定のJavaドキュメントを確認し、エスケープ\して最終結果を取得してください。

"\\<([^<>]*?)\\>"

先のとがったブラケットの内側で次々に移動したい場合、正規表現はそのようなことで多くの問題を抱えているので、別の方法を試す必要があるかもしれ<ません>

これが正規表現のサンプルです

于 2013-02-27T18:56:58.380 に答える