首页 > 解决方案 > 仅当前面有特定模式时才匹配单词

问题描述

我有一个来自 NWS 公告的字符串:

LTUS41 KCAR 141558 AAD TMLB Forecast for the National Parks 
KHNX 141001 RECHNX Weather Service San Joaquin Valley

我的目标是用正则表达式提取几个字段。在第一个字符串中我想要“AAD”,从第二个字符串中我想要“RECHNX”。我努力了:

( )\w{3} #for the first string

\w{6} #for the 2nd string

但是这些找到了我想要的字符串的所有 3 和 6 个字符串。

标签: pythonregexpython-2.7

解决方案


假设您要提取的字段始终为大写字母并以 6 位数字和一个空格开头,则此正则表达式可以解决问题:

(?<=\d{6}\s)[A-Z]+

演示:https ://regex101.com/r/dsDHTs/1

编辑:如果你想匹配最多两个字母数字大写单词,前面有 6 个数字,你可以使用:

(?<=\d{6}\s)([A-Z0-9]+\b)\s(?:([A-Z0-9]+\b))*

演示:https ://regex101.com/r/dsDHTs/5

如果您有有效字段的特定列表,您也可以简单地使用:

(AAD|TMLB|RECHNX|RR4HNX)

https://regex101.com/r/dsDHTs/3


推荐阅读