2009-05-02 21 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  

怎樣更改我的正則表達式來捕獲任何6個數字,然後用之間沒有阿爾法前面有一個L 7個位數?

謝謝!

+0

你的意思是不能在中間有alpha或忽略中間的alpha? – 2009-05-02 03:16:33

+0

是否標記評論開始的刻度線(')?您想要匹配的輸入中是否包含評論? – dustyburwell 2009-05-02 03:19:06

回答

1

至於匹配

任何6位數字加

之間 沒有阿爾法之前通過L可以使用圖案7位:

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

這將匹配

L(任意數量的空白)dddddd(任意數量的空白)ddddddd

被邊界包圍。當涉及到多行匹配時,這通常是一個可以使用正則表達式引擎設置的標誌。 \將會很好地匹配換行符,但前提是您設置了多行標誌。

0

請嘗試以下操作。根據你的摘要我它匹配的組的6位,隨後的空白的任何長度,包括新的行,則接着是L和7位

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

我使用正則表達式的形式。淨。如果你使用不同的引擎,你可以發佈哪一個?這也只能用於ASCII字符集。

1

我在右欄中看到了八位數字,而不是七位。我查看錯了嗎?所以我認爲這個問題不像以前的答案似乎正在回答。這七位數字實際上在下一行。

此外,這看起來像固定長度的列輸出給我,所以如果你知道列的數量,你可以通過使用確切的數字而不是*修飾符來獲得顯着的速度。

因此,如果 「x」 是L和6個數字,而 「L」 是在第一列之間的列數,

$文本=〜米/ L \ S {X}(\ d {6})。* [\ r \ n] \ s \ s {x}(\ d {7})/

看起來好像應該匹配。不知道文件中還有什麼可以處理的,但它可以開始。

$ 1 =第一個數字塊(6),$ 2 =下一行的7位數字。 (使用perl語法,根據需要調整其他實現)

相關問題