2016-09-22 13 views
0

1つの正規表現パターンで次のようにしたいと思います。 (私はプログラムコードにアクセスできません、正規表現パターンのみを挿入できます) 私は入力としてテキストを持っています。ケース「レモン」のためにREGEX - group - JAVA

1000 lemons, 2 apples. 

私は、自動的にそれらの数、私は自動的にそれらの数をしたい場合、「りんご」の をしたいです。正規表現パターンで

/\d+\s(apples)/ 

ように私は結果

2 apples 

になるだろう。しかし、私は結果ONE正規表現パターンと

2 

をしたいです。

どうすればいいですか?私は、プログラムコードへのアクセスを得なかっまし

+0

コードを共有してください。 'apples'ではなく' \ d + 'の周りにキャプチャグループを使うことができます。おそらく、必要なのは '(\ d +)\ s * \ w +'です。または、 '(\ d +)\ s *(?:りんご?|レモン?)' –

+0

@WiktorStribiżewしかし、この場合、 "1000 lemons"という結果が得られます。 – CyKon

答えて

1

ので、私はチェックする必要があります

あなたは肯定先読みベースの正規表現を必要とする正規表現パターン(すなわち一部を挿入することができます以下のためではなく、出力から廃棄された)(?=....)構造の内側に存在する必要があります:あなたの例については、

\d+(?=\s*\w+) 

またはもう少し具体的に(あなたが必要な場合)のみ、特定の単語の前に数字を一致させるために

\d+(?=\s*(?:apples?|lemons?)) 

regex demo 1demo 2を参照してください。

lookaheadsはテキストを消費しないので、一致するテキストは出力に表示されません。のみレモンの数を検索する

?が先行する文字任意(マッチ1又は0の出現)を行うこと

\d+(?=\s*lemons?) 

注意してください。

+0

さて、はるかに良く見えます。しかし、私はレモンの数だけ必要な場合?? – CyKon

+0

先読みに 'lemon 'を置いておけば、' \ d +(?= \ s * lemons?) 'です。最後の '? 'は' s'をオプションにします。 ** AND **単語の境界を '\ b'で囲んで、単語全体にのみ一致させることもできます*。 –

+0

ありがとうございました :) – CyKon