试图使它起作用
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行here。
答案 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'}