3

フライト情報を解析しています。

サンプルデータは次のとおりです。

E0.777 7     3:09
E0.319 N     1:43
E0.735 8     1:45
E0.735 N     1:48
E0.M80 9 3:21
E0.733       1:48

次のようなフィールドに入力する必要があります。

Equipment: 735
On Time: N
Duration: 1:48

私が抱えている問題は、YまたはN文字をキャプチャしているが、1桁を無視して、期間をキャプチャしていることです。

これは私が試した表現です:

@"^.{3}(.{3})\s?([N|Y]?)?(?:[0-9]\s+)?(\w{4})"

編集:質問を明確にするためにサンプルデータを更新しました。装備は必ずしも3桁ではなく、1文字と2桁の場合があります。機器と期間の間のデータは、ブール値のNまたはY、1桁の数字、または空白である可能性があります。ブール値のみをキャプチャする必要があります。

4

4 に答える 4

6

まず、交替の概念を混同すると、文字クラスは3つ[Y|N]の異なる文字に一致します:Yまたは。パイプを使用するか、省略してください。|N(...)

第二に、キャラクタークラスの後のあなたのダブル?は実際には何もしません。第三に、最後に、数字が見つかった場合にのみ連続するスペースに一致します。ただし、数字がない場合、最後の数字?はサブパターンを無視するため、スペースも許可されません。

最後に、と\wは一致しません:

これを試して:

@"^.{3}(\d{3})\s?(?:([NY])|\d)\s+(\d:\d\d)"

.また、最初に繰り返される文字をより正確な文字クラスに制限することも検討する必要があります(つまり\w{2}\.、その可能性はわかりません)。

于 2012-10-24T19:37:55.250 に答える
2
@"^..\.(\d{3})\s(?:([YN])|\d)\s*(\S{4})"
  • 文字3のリテラルがあることについてもう少し具体的なものに変更.{3}されました。..\..
  • (?:([YN])|\d)Y / Nまたは数字のいずれかに一致しますが、YまたはNのみをキャプチャします。ではないことに注意して[YN]ください[Y|N]
  • コロンと一致しないため、に変更\w{4}されました。\S{4}\w:
于 2012-10-24T19:37:53.840 に答える
0

これにより、YまたはNのすべての行がキャプチャされ、それ以外はすべて無視されます。

^...(\d{3})\s*([YN])\s*(\d+:\d+)
于 2012-10-24T19:39:18.693 に答える
0

これはそれを行います...

^\w\d\.(\d{3})\s(?:([YN])|\d)\s*(\d:\d{2})$

私はあなたの正規表現に他のいくつかの変更を加えました。なぜなら、あなたのデータに基づいてそれを書き直してから、あなたが持っていたものを変更しようとする方が簡単だったからです。

これにより、YまたはNがキャプチャされるか、そのグループ内の何もキャプチャされません。また、期間の正規表現をより具体的にしようとしました。

更新:これは新しい要件で機能します...

^\w\d\.(\w{3})\s(?:([YN])|\d|\s)\s*(\d:\d{2})$

あなたはそれがあなたのデータで働いているのをここで見ることができます... http://regexr.com? 32j1b

(各行にカーソルを合わせると、一致するグループが表示されます)

于 2012-10-24T19:42:54.790 に答える