首页 > 解决方案 > 在 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, -shra, vcsh, vcts, vcsh,vcsh

不知道为什么它不工作

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

标签: regexmatlab

解决方案


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

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

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

正则表达式演示在这里


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

推荐阅读