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
, -shra
, vcsh
, vcts
, vcsh
,vcsh
不知道为什么它不工作
原始代码在 Python 中的第 300-305 行。
解决方案
您的正则表达式中有一些错误,例如|
非捕获组中的双精度数和 的转义+
,这是一个量词,因此除非您尝试匹配文字,否则不需要转义+
。
也不需要环顾四周。您可以使用:
-?(?: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'}
推荐阅读
- dask - 如何在 Dask 中为 GroupBy 添加自定义聚合函数?例如平均值、众数、中位数、第 95 个百分位数等
- flutter - centerTitle 和 TextAlign.centre 有什么区别?
- java - 图像加载和上传到 Firebase 存储无法在 android 和 firebase 控制台中显示“错误加载预览”
- c - 用于在 C 中打印 uknown 大小的二维数组的函数
- alexa-skill - 带有 Jovo 框架的 Alexa 语音:这可以通过话语获得 IntentName 吗?如何根据用户话语决定跳转到哪个意图?
- angular - primeng 树,p-tree 默认扩展和选择节点,突出显示不起作用
- angular - 在一个地方导入所有文件时,sass 变量在 Ionic-4 中不起作用
- javascript - 结帐条纹上的空白图片
- apache-kafka - 如何配置 Spring Cloud Stream (Kafka) 应用程序以在 Confluent Cloud 中自动创建主题?
- c# - 如何将一个 web api 控制器方法调用到另一个 web api 项目中?