1

次の結果を生成する正規表現を作成しようとしています:

  • for 7.0 + 5 - :asc + (8.256 - :b)^2 + :d/37.0、5asc8.256:b2d、3
  • のために-+*-/^^ )ç@:何も

最初に浮動小数点数に一致する必要があるため、正規表現には:がありますが、:a:Abc[0-9]+(\\.[0-9])?などの特殊なケースもマッハする必要があります。

より正確には、(可能であれば)数学演算子/ *+^-と括弧以外のものと一致する必要があります。

これが私の最後の正規表現です:しかし、私が与えた両方の例で3が返される([0-9]+(\\.[0-9])?)|(:[a-zA-Z]+)ため、機能していません。matcher.groupCount()

4

3 に答える 3

3

グループは、正規表現で具体的にグループ化するものです。括弧で囲まれたものはすべてグループです。(Hello) World1つのグループがありHelloます。あなたがする必要があるのは、すべての一致を見つけることです。

あなたのコード([0-9]+(\\.[0-9])?)|(:[a-zA-Z]+)では、3セットの括弧が見られます。これが、すべての試合で常に3つのグループが与えられる理由です。

コードはそのままで正常に機能します。例を次に示します。

String text = "7.0 + 5 - :asc + (8.256 - :b)^2 + :d/3";

Pattern p = Pattern.compile("([0-9]+(\\.[0-9]+)?)|(:[a-zA-Z]+)");
Matcher m = p.matcher(text);

List<String> matches = new ArrayList<String>();
while (m.find()) matches.add(m.group());

for (String match : matches) System.out.println(match);

ArrayListmatchesには、正規表現で見つかったすべての一致が含まれます。+私が行った唯一の変更は、2番目の後にを追加することでした[0-9]。出力は次のとおりです。

7.0
5
:asc
8.256
:b
2
:d
3

ここgroupsに、Javaでの詳細情報があります。

それは役に立ちますか?

于 2013-01-04T21:46:22.303 に答える
0
([^\()+\-*\s])+ //put any mathematical operator inside square bracket
于 2013-01-04T21:48:08.527 に答える
0

正規表現が正しい場合は、次のコードを実行します。

    String input = "7.0 + 5 - :asc + (8.256 - :b)^2 + :d/3"; // your input
    String regex = "(\\d+(\\.\\d+)?)|(:[a-z-A-Z]+)"; // exactly yours.
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(input);
    while (matcher.find()) {
        System.out.println(matcher.group());
    }

あなたの問題は方法の理解ですmatcher.groupCount()JavaDocは明確に言っています

このマッチャーのパターンのキャプチャグループの数を返します。

于 2013-01-04T22:03:04.693 に答える