2

OK、この質問を改善する必要があります。これをもう一度試してみましょう:

空港コードの後に​​続く飛行時間を解析する必要がありますが、2 つの間に 1 桁の数字と空白が含まれている可能性があります。

サンプルデータ:

ORD  1100
HOU 1 1215
MAD   4  1300

私はこれを試しました:

([A-Z]{3})\s?\d?\s?(\d{4})

空港コードと 1 桁の数字で終わります。空港コードの後の 4 桁の飛行時間を除くすべてを無視する正規表現が必要です。

質問を改善したことを願っています。

4

3 に答える 3

2

解決策は次のように簡単です。

\d{4}

入力によると、前の数字を気にする必要はありません..

于 2012-10-08T17:53:12.520 に答える
1

これは私が使用する答えです:

@"([A-Z]{3})\s+(?:[0-9]\s+)?([0-9]{4})"

基本的に、あなたがやろうとしていたことと非常に似ています。

最初の部分は([A-Z]{3})で、3 つの大文字を検索してグループ 1 に割り当てます (グループ 0 は文字列全体です)。

2 番目の部分は\s+(?:[0-9]\s+)?で、少なくとも 1 つのスペースが必要で、どこかに 1 桁の可能性があります。中央の非キャプチャ グループでは、そこに数字が 1 つある場合、その後ろに少なくとも 1 つのスペースが必要です。これにより、 などの不一致が防止されますABC 12345

次に([0-9]{4})、探している 4 桁に単純に一致した があります。これらはグループ 2 にあります。ここでは [0-9] を使用します。なぜなら、\d私たちが慣れ親しんでいるものよりも多くの数字を指すからです (東アラビア数字のように)。

于 2012-10-09T13:16:27.287 に答える
1

後読み先読みを使用して、数字以外 (または先頭/末尾) で囲まれた 4 桁のみであることを確認します。

"(?<=[^\d]|^)\d{4}(?=[^\d]|$)"

この 2 つは、周囲に空白がある 4 桁のみに一致[^\d]するように置き換えることができます。[\s]

更新: 最新の更新で、正規表現を(コメントから)あなたのものとマージし、これを思いつきました:

"(?<=[A-Z]{3}\s(\d\s)?)\d{4}(?=\s|$)"

パターンには 3 つの部分があります。最初は後読みです: (?<=PatternHere). この内部のパターンは、求めるものの前に発生/一致する必要があります。

次の部分は、単純なメイン パターンです: \d{4}, 4 桁。

最後の部分は先読み: です。これは後読み(?=PatternHere)とほとんど同じですが、反対側のforwardをチェックします。

于 2012-10-08T18:08:43.767 に答える