Помогите улучшить RegEx ("\ b \ d {6} ([] {1,15}) \ d {7} \ b") - PullRequest
0 голосов
/ 02 мая 2009

В прошлом я понимал, что широта / долгота аэропорта должна была находиться на одной линии (L 300216 0915302 '2425 29865997), а 300216/0915302 - широта / долгота. Я только что узнал, что пользователи могут также использовать Lat / Lon на разных строках.

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    

Как мне изменить мой RegEx, чтобы перехватывать любые 6 цифр, за которыми следуют 7 цифр, перед которыми стоит буква L без альфа?

Спасибо!

Ответы [ 3 ]

1 голос
/ 02 мая 2009

Что касается сопоставления

любые 6 цифр, за которыми следуют 7 цифр, перед которыми стоит L без альфа-символов между

Вы можете использовать шаблон:

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

Это будет соответствовать

L (любое количество пробелов) dddddd (любое количество пробелов) ddddddd

в окружении границ. Когда речь идет о сопоставлении по нескольким строкам, обычно это флаг, который вы можете установить с помощью используемого вами механизма регулярных выражений. \ S будет точно соответствовать новым строкам, но только если у вас установлен многострочный флаг.

1 голос
/ 02 мая 2009

В правой колонке я вижу восемь цифр, а не семь. Я смотрю это неправильно? Поэтому я думаю, что вопрос не совсем в том, на что, как кажется, отвечают предыдущие ответы. Семь цифр на самом деле на следующей строке.

Кроме того, для меня это выглядит как вывод столбцов фиксированной длины, так что если вы знаете количество столбцов, вы можете получить значительную скорость, используя точные числа вместо модификатора *.

Так что, если «x» - это число столбцов между L и 6 цифрами, а «L» - в первом столбце,

$ text = ~ m / L \ s {x} (\ d {6}). * [\ R \ n] \ s \ s {x} (\ d {7}) /

выглядит так, как будто оно должно совпадать. Не уверен, что еще может быть в файле, чтобы иметь дело, но это где-то начать.

$ 1 = первый блок цифр (6), $ 2 = 7 цифр на следующей строке. (используя синтаксис perl, при необходимости измените его для других реализаций)

0 голосов
/ 02 мая 2009

Попробуйте следующее. Исходя из вашего резюме, я должен сопоставить его с любой группой из 6 цифр, затем с любой длиной пробела, включая новые строки, затем с L и 7 цифрами

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

Я использовал .Net форму регулярного выражения. Если вы используете другой движок, можете ли вы опубликовать какой? Это также будет работать только против набора символов ASCII.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...