2009-05-02 11 views
0

空港の緯度/経度は、同じ行(L 300216 0915302 '2425 29865997)にあり、300216/0915302はLat/Lonです。私はちょうどユーザーがLat/Lonを別の行に置くこともできることを知りました。ヘルプRegEx( " b d {6}([] {1,15}) d {7} b")

I ARA         '* ACADIANA AIRPORT   29865996  
       L 300216        '2425  29865997  
        0915302        '2425  29865998  
       S MSY           29865999  
       M 05E           29866000  
       P 100 0300          29866001  
       P 239 3405          29866002  
       P 999 7001 O         29866003  

どのようにしてトラップする間にはアルファとLが先行する7桁の数字が続く任意の6桁の数字を私の正規表現を修正しますか?

ありがとうございます!

+0

間にalphasを挟むことはできませんか、間にalphasを無視することはできますか? –

+0

コメントの先頭に目盛り( ')が付いていますか?入力内容にコメントが含まれていますか? – dustyburwell

答えて

1

L(任意の空白量)dddddd(任意の空白量)ddddddd

境界で囲まれています。複数の行にまたがって一致する場合は、通常、使用している正規表現エンジンで設定できるフラグです。 \ sは改行と一致しますが、複数行のフラグが設定されている場合にのみ一致します。

+0

"\ sは、改行が一番うまく一致しますが、複数行のフラグが設定されている場合にのみ一致します。" - いいえ、\ sは常に改行にマッチします。multilineフラグは^と$アンカーの動作を変更し、シングルラインフラグはドットメタキャラクタを改行にマッチさせます。 (Rubyを除いて、マルチラインモードは他の人がシングルラインモードと呼んでいるものと同じで、 "シングルライン"修飾子はありません) –

+0

ああ、うーん...フィードバックありがとう。正直言って、私の正規表現は、少なくともエンジンがどのように動作し、どのフラグをいつ設定するかに関しては、何らかの作業が必要です。 – dustyburwell

0

以下を試してください。あなたの概要に基づいて、私はそれが、私は正規表現の純フォームを使用しましたLと7桁

\d{6}[\s\n]*L\s*\d{7} 

続く新しい行を含む空白の任意の長さに続く6桁の任意のグループを、一致していました。別のエンジンを使用している場合、どちらのエンジンを投稿することができますか?これはASCII文字セットに対してのみ機能します。

\bL\s*\d{6}\s*\d{7}\b 

これは一致します。あなたがパターンを使用することができ

間にはアルファとLが先行7桁の数字が続く

任意の6桁を一致させるためとして

1

私は7桁ではなく、8桁の数字を表示します。私は間違って見ていますか?だから私はその質問が以前の答えが答えているようなものではないと思います。実際には7桁の数字が次の行に表示されます。

また、これは私に出力される固定長の列のように見えます。したがって、列数を知っていれば、*修飾子の代わりに正確な数値を使用するとかなりのスピードを上げることができます。したがって

"x" はLと6桁、および "L" の間、列の数は、最初の列にある、

$テキスト=〜M/L \ S {X}(\ Dである場合{6})。* [\ r \ n] \ s \ s {x}(\ d {7})/

は一致するかのように見えます。対処するファイルには他に何があるのか​​はわかりませんが、開始する場所です。

$ 1 =最初の桁数(6)、$ 2 =次の行の7桁。 (perl構文を使用して、他の実装では必要に応じて調整してください)

関連する問題