3

Java を使用して、ドル記号の間の単語を抽出したいと考えています$

例えば:

String = " this is first attribute $color$. this is the second attribute $size$"

文字列を引き出したい:colorそしてsizeそれらをリストに入れます。

私が試してみました:

Pattern pattern = Pattern.compile("(\\$) .* (\\$)");
Matcher matcher = pattern.matcher(sentence);

しかし、私は出力を取得します:

"$color$.this is the second attribute $size$"

これを行う最善の方法は何ですか?

4

6 に答える 6

2

任意のシンボルに.*一致する問題。したがって、パターンの結果は、最初と最後がドル記号であるように正しいです。

ドル間の変数が英数字のみの場合\$\w+\$

于 2012-11-01T10:01:50.170 に答える
1

単語にドルが含まれていないことを確認します。(\$)[^$]*(\$)

または、貪欲な代わりに、消極的なマッチオールを使用します(\$) .*? (\$)

于 2012-11-01T10:02:10.117 に答える
1

この正規表現を試してください。それは期待されるものを与えるべきです。

Pattern pattern = Pattern.compile("\$(.*?)\$");
于 2012-11-01T10:02:51.537 に答える
1

問題は、使用している正規表現が貪欲で、文字列の最初$から最後まですべてを消費することです。正規表現を非貪欲にするには、の後に$a を追加する必要があります。?*

Pattern pattern = Pattern.compile("\\$(.*?)\\$");
Matcher matcher = pattern.matcher(sentence);
List<String> result = new ArrayList<String>();
for(int i=1; i <= matcher.groupCount(); i++)
    result.add(matcher.group(i);
于 2012-11-01T10:03:04.190 に答える
1

パターンでは貪欲でない修飾子を使用する必要があります。

Pattern pattern = Pattern.compile("\\$(.*?)\\$");

アスタリスクの後の疑問符に注意してください。また、+代わりに の使用を検討することもできます*

于 2012-11-01T10:03:40.070 に答える
1

貪欲でない一致を使用して最小の一致を見つけ、グループを使用して「$」なしで単語のみを抽出できます。

"\\$(.*?)\\$"

単語は最初のグループで見つかります。

matcher.group(1)
于 2012-11-01T10:04:41.730 に答える