0

つまり、基本的に、この巨大な正規表現パターンがあり、その中間のどこかに式があります(?:\s(\d\d\d)|(\d\d\d\d))。解析のこの部分では、スペースに続く 3 桁または 4 桁のいずれかをキャプチャしたいのですが、全体を括弧で囲むことによるキャプチャは必要ありません (?:キャプチャ以外のものは作成しません)。 )。「または」ロジックが機能するように、括弧を使用する必要があります(と思います)。

したがって、潜在的な入力例は次のようになります...

  • input1= Giantexpression 123文字以上
  • input2= Giantexpression1234blahblahblah

試し(?:\s(\d\d\d)|(\d\d\d\d))てみたところ、少なくとも4桁の場合は追加のキャプチャが得られました。それで、私はこれを正しくやっていますか、それともどこかでめちゃくちゃになっていますか?

編集:

さらに詳しく説明すると、現在使用している正規表現は次のとおりです。

pattern = @".?(\d{1,2})\s*(\w{2}).?.?.?(?:\s(\d\d\d)|(\d\d\d\d)).*"

最初に少し解析する必要があります。「または」を使用する必要がないため、ショーン・ジョンソンの答えはまだ機能すると思います。しかし、「または」を使用する方法はありますか?その能力はいずれ必要になると思います。

4

1 に答える 1

1

これはうまくいくはずです:

(?:\s(\d{3,4}))

そのサブパターンでロジックを実行していない場合、数字をキャプチャするだけであれば、括弧で囲む必要さえありません。次のパターン:

\s(\d{3,4})

スペース文字の直後に続く 3 桁または 4 桁の数字をキャプチャします。

于 2012-06-26T18:30:27.743 に答える