簡體   English   中英

RegEx匹配Perl中的多行

[英]RegEx match for multiline in Perl

我需要在Perl中解析以下數據行:

  my $string='Upper Left  (  440720.000, 3751320.000) (117d38\'28.21"W, 33d54\'8.47"N)';

這是我的perl腳本:

  if ($string=~ m/Upper Left\s+[(]\s+\d{1,6}[.]\d{1,3}[\,]\s+\d{1,6}[.]\d{1,3}[)]\s+[(](\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})/ig) {
    $upperLeft="lat=". $1. 'd'. $2. "'". $3. ".". $4. '"W long='. $5. 'd'. $6. "'". $7. ".". $8. '"W';
    print $upperLeft. "\n";
   }

但是,此表達式無法像lat那樣連續地到達117d38'28.21“和33d54'8.47一樣長。請注意我用來創建此正則表達式的輸入$ string中的空格和'('。

將(117d38'28.21“ W,33d54'8.47” N)提取到8個字段中,我做錯了什么? 任何幫助表示贊賞。

你有幾個問題。 主要是您的正則表達式只是解析為經緯度,而不是lon。

發生了什么變化:

m/Upper Left\s+[(]\s+\d{1,6}[.]\d{1,3}[\,]\s+\d{1,6}[.]\d{1,3}[)]\s+[(](\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})/ig
m/Upper Left\s+[(]\s+\d{1,6}[.]\d{1,3}[\,]\s+\d{1,7}[.]\d{1,3}[)]\s+[(](\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})"([WE])[\,]\s(\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})"([NS])/ig
                                                  ^-- Your test number was 7-digit big                             ^-- (1)     ^-- (2)                                     ^-- (3)

在結尾處:(1)添加了組來處理W / E([WE]) )。 (2)添加了組以提取lon數。 (3)添加了處理N / S([NS]) )。

您的代碼已更正:

if ($string=~ m/Upper Left\s+[(]\s+\d{1,6}[.]\d{1,3}[\,]\s+\d{1,7}[.]\d{1,3}[)]\s+[(](\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})"([WE])[\,]\s(\d{1,3})d(\d{1,2})['](\d{1,2})[.](\d{1,2})"([NS])/ig) {
    $upperLeft = "lat=" . $1 . 'd' . $2 . "'" . $3 . "." . $4 . '"' . $5 . " long=" . $6 . 'd' . $7 . "'" . $8 . "." . $9 . '"' . $10;
    print $upperLeft. "\n";
}

輸出:

lat=117d38'28.21"W long=33d54'8.47"N

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM