正则表达式与MATLAB中的环顾四周

时间:2018-09-08 07:41:47

标签: regex matlab

试图使它起作用

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-shravcshvctsvcshvcsh

不确定为什么它不起作用

原始代码在Python中第300-305行here

1 个答案:

答案 0 :(得分:2)

您的正则表达式中存在一些错误,例如非捕获组中的双|和转义+(这是一个量词),因此不需要转义,除非您是尝试匹配文字+

也不需要环顾四周。您可以使用:

-?(?: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,}

正则表达式演示here


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'}