次のタイプのデータに対して照合しようとしている正規表現があります。各トークンは不明な数のスペースで区切られています。
更新:「テキスト」はほとんどすべての文字にすることができます。これが、.*
最初に持っていた理由です。重要なことに、スペースを含めることもできます。
- 文章
- テキスト 01
- テキスト 01/03
- テキスト 01 (03 のうち)
- テキスト 01-03
「テキスト」、「01」、および「03」を個別のグループとしてキャプチャしたいのですが、「テキスト」以外はすべてオプションです。これまでに私ができる最高のことは次のとおりです。
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)
これは #3 ~ #5 に一致し、それらを適切なキャプチャ グループに配置します。?
しかし、オプションの後に式の一部を作成するために最後に追加を追加する01
と、キャプチャ グループがすべてファンキーになる理由がわかりません。
\s*(.*)\s+(\d+)\s*(?:\s*\(?\s*(?:of|-)\s*(\d+)\s*\)?\s*)?
上記の RegEx は #2 ~ #5 に一致しますが、キャプチャ グループは #2 と #5 のみが正しいです。
これは単純な正規表現のように見えるので、なぜこれほど苦労しているのかわかりません。
これは、これをデバッグするために使用しているオンライン正規表現エバリュエーターへのリンクです: http://regexr.com?2tb64。リンクには、最初の RegEx とテスト データが既に入力されています。