Регулярное выражение с lookarounds в MATLAB - PullRequest
0 голосов
/ 08 сентября 2018

Пытаясь заставить это работать

regexp(taf_input, '(?<= \s )((?: \+|\-|VC|RE|MI|BC|DR|BL|SH|TS|FZ|PR|DZ|RA|SN|SG|IC|PL|GR|GS|UP|BR|FG|FU|DU|SA|HZ||SS|DS)+ )(?= \s|$)',match)

taf_input = 'KMEM 080545Z 0806/0912 18005KT P6SM VCSH FEW025 SCT060 BKN150 TEMPO 0808/0812 6SM -SHRA BKN025 OVC060 FM081200 18008KT P6SM VCSH FEW012 BKN030 FM081700 19011G17KT P6SM VCTS SCT025CB BKN035 FM082300 21007KT P6SM VCSH FEW015 BKN040 FM090800 23004KT 6SM BR VCSH BKN009 OVC015 ='

Это должно соответствовать vcsh, -shra, vcsh, vcts, vcsh, vcsh

Не уверен, почему он не работает

Оригинальный код на Python в строке 300-305 здесь .

1 Ответ

0 голосов
/ 08 сентября 2018

В вашем регулярном выражении есть несколько ошибок, например, двойное | в группе без захвата и экранирование +, которое является квантификатором и поэтому не требует экранирования, если вы не пытаетесь сопоставить буквальный +.

Также не нужно искать обходных путей. Вы можете использовать:

-?(?:VC|RE|MI|BC|DR|BL|SH|TS|FZ|PR|DZ|RA|SN|SG|IC|PL|GR|GS|UP|BR|FG|FU|DU|SA|HZ|SS|DS){2,}

Regex demo здесь .


MATLAB демо:

>> taf_input = 'KMEM 080545Z 0806/0912 18005KT P6SM VCSH FEW025 SCT060 BKN150 TEMPO 0808/0812 6SM -SHRA BKN025 OVC060 FM081200 18008KT P6SM VCSH FEW012 BKN030 FM081700 19011G17KT P6SM VCTS SCT025CB BKN035 FM082300 21007KT P6SM VCSH FEW015 BKN040 FM090800 23004KT 6SM BR VCSH BKN009 OVC015 ='
>> regexp(taf_input,'-?(?:VC|RE|MI|BC|DR|BL|SH|TS|FZ|PR|DZ|RA|SN|SG|IC|PL|GR|GS|UP|BR|FG|FU|DU|SA|HZ|SS|DS){2,}','match')

ans =

  1×6 cell array

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