-1

という広告申込情報があります

お支払い - ありがとうございます - $50.00。

この値を次のように分割したい

お支払い - キーとしてありがとう

としての価値

-$50.00。

私は次のように正規表現を書きました

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");

しかし、私はPAYMENTとしてキーを取得しています-ありがとう-そして$ 50.00としての値は正規表現で何が間違っているのか誰か助けてください

4

5 に答える 5

7

それが得られる理由は、最初のブロックに貪欲な正規表現があるためです。-最初のグループは、許可されているという理由だけでをキャプチャします。

それを修正する1つのことは、 の?後にを削除し、 を2番目の正規表現に-強制することです-

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-\\$[0-9|,]*\\.[0-9][0-9])");

http://rubular.com/r/MDHPux502R


そもそも が存在していたという事実を考えると、はオプションで?あると思われますが、-

最初のグループを非貪欲にするには、の?後にa を追加できます+

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");

http://rubular.com/r/In9M650QcB

于 2013-06-28T20:15:00.127 に答える
0

\\-?パターンのパーツで何を達成しようとしているのかわかりませんが、これはうまくいくはずです:

Pattern.compile("([a-zA-Z -]*[a-zA-Z ])(-?\\$[0-9|,]*\\.[0-9][0-9])");
于 2013-06-28T20:15:53.533 に答える
0

特に指定のない限り、データは可能な場合は以前のフィールドに移動する傾向があります。

あなたがする必要があるのは、最初のフィールドの最後の文字がダッシュであってはならないことを指定することです:

Pattern.compile("([a-zA-Z -? a-zA-Z]+[^-])(-?\\$[0-9|,]*\\.[0-9][0-9])");
于 2013-06-28T20:17:33.133 に答える
0

これを試して:

"([a-zA-Z -]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"

あなたの正規表現は、最初の文字グループで - をキャッチしています。

于 2013-06-28T20:18:03.357 に答える