regex - 在 MATLAB 中使用正则表达式提取文本数据
问题描述
我正在处理在 METAR(机场天气观测数据)中提取能见度数据。
能见度是一个4位(0~9)的数据,能见度好的也可以表示为'CAVOK'。
但是使用正则表达式非常棘手。(METAR 数据有很多变化。)
数据样本(MET_VIS)如下:
201903072300 METAR RKPC 072300Z 17003KT 110V210 CAVOK 05/02 Q1026 NOSIG=
201903062000 METAR RKPC 062000Z 33018G29KT 4000 BR FEW012 SCT025 08/04 Q1018 WS R13 R31 NOSIG=
201903062200 METAR RKPC 062200Z 33015KT 290V350 9999 SCT030 07/03 Q1019 NOSIG=
201903080000 METAR RKPC 080000Z 29002KT CAVOK 08/02 Q1027 NOSIG=
我想在每一行上提取 CAVOK、4000、9999、CAVOK。
我试过了,但这段代码不适用于第 3 行 :( 它返回空白。
regexp(MET_VIS(i),'((?<=KT\s)\d{4})|CAVOK','match')
解决方案
第三个值不在 KT 上结束。您可能会做的是使用另一个积极的后向检查来检查它之前的字符串是否以 KT 结尾并匹配匹配范围为 7 次 A-Z0-9 后跟一个空格字符。
然后你要么匹配 4 位数字,要么使用交替(?:\d{4}|CAVOK)
匹配 CAVOK,否则你可以匹配字符串中任何位置的 CAVOK。
在它之后添加一个单词边界以防止匹配成为更大单词的一部分。
(?:(?<=KT\s)|(?<=KT [A-Z0-9]{7}\s))(?:\d{4}|CAVOK)\b
推荐阅读
- dji-sdk - 何时使用 DJISDKManagerDelegate。componentConnectedWithKey 还是 productConnected?
- c++ - C++ 中的 OpenGL - 链接 GLEW 和 GLFW 时出错(在 macOS 上使用 Xcode)
- c++ - 谁是 IDataObject::GetData 呈现的数据的所有者?
- javascript - TS 命名空间 - 浏览器中的“不是函数”
- javascript - 有没有一种简单的方法可以使用 TypeScript 更改嵌套 json 数据中的一个值?
- python - 使用列表和字符串搜索字典
- python - python中的反向映射
- azure-active-directory - Azure AD 应用程序清单 - 添加的用户将具有“Approles.value”,组没有
- c# - 使用 asp.net 删除 amazon s3 上的文件
- heatmap - 如何在自定义模型上使用 Allen NLP 解释