2013-06-14 2 views
0

я следующую строку данных мне нужно разобрать в Perl:RegEx матч для многострочного в 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"; 
    } 

Однако это выражение не в 117d38'28.21" как lat и 33d54'8.47. Обратите внимание на пространство и '(' во входной строке $, которую я использую для создания этого регулярного выражения.

Что я делаю неправильно при извлечении (117d38'28.21 "W, 33d54 '8.47 "N) в 8 полей? y помощь приветствуется.

ответ

1

У вас было несколько вопросов. Главное, чтобы ваше регулярное выражение просто анализировалось до lat, а не 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 
+0

Пробовали ли вы это? – acdcjunior

+0

Я попробую и дам вам знать ... спасибо ... – user914425

+0

спасибо, что это сработало. – user914425