2

私はこれを理解しようとして何時間も壁に頭をぶつけてきました。3つのグループが存在する場合はそれらをキャプチャし、存在しない場合は最初のグループのすべてをキャプチャしようとしています。これを個別の正規表現ステートメントに分割することはできますが、1つを維持するのは素晴らしいことです。

4つの異なる文字列は次のようになります。

Be somewhere now & be there later (Store) @1300
Be at work! @1430
Go home whenever (Home)
Don't ever go to the donut shop.

私が探している最終結果は次のようになります。

(Group 1) Be somewhere now & be there later (Group 2) Store (Group 3) @1300
(Group 1) Be at work! (Group 2) (Group 3) @1430
(Group 1) Go home whenever (Group 2) Home (Group 3)
(Group 1) Don't ever go to the donut shop. (Group 2) (Group 3)

これまでにできる最善のことは、1番目と2番目のオプションを処理し、グループ3のみを取得することです。これを使用してこれを実行しました。

.*(?:\(.*\))?\s(\@\d+)$

.*私がそれをそれに変えるならば、それを(.*)常にすべてに一致させるので、私はそれを取り除く必要があるだろうとかなり確信しています。

私は私が知っているあらゆる方法を試しましたが、それを機能させることができないので、今私はあなたに連絡します。:-)

4

1 に答える 1

1

これを試して:

^(.*?)(?:\(([^)]+)\))?(?:\s+@(\d+))?$

重要なのは、.*?貪欲でない一致であるということです。一致は可能な限り少なくなるため、他のグループが一致しない場合を除いて、文字列全体とは一致しません。

オンラインで動作することを確認してください:rubular

于 2012-09-16T17:07:38.917 に答える