老实说,我不知道为什么这行不通,我正在专门尝试确定哪个代码是
SN
)FZDZ
,FZRA)
IC
,PL
,IP
)和RAPL|PLRA|SNPL|PLSN|SNFZDZ|SNFZRA|RASN|SNRA|DZSN|SNDZ
中带有+
或-
或没有符号的任何类型。 先谢谢了。
import pytaf
import re
values = "TAF KZZZ 072336Z 0800/0900 11006KT P6SM SN OVC060 FM080100 11006KT P6SM SN OVC060 FM080200 11006KT P6SM SN OVC060"
taf = pytaf.TAF(values)
def precip_extraction_function(taf):
precip_groups=taf._raw_weather_groups
snow = re.compile(r"SN")
pellets = re.compile(r"/-PL/|/IC/")
freezing = re.compile(r"/FZRA/|/FZDZ/")
mix=re.compile(r"(RAPL|PLRA|SNPL|PLSN|SNFZDZ|SNFZRA|RASN|SNRA|DZSN|SNDZ)")
precip_tf=[]
for lines in precip_groups:
print(lines)
# initilzing vars
if (bool(snow.match(lines))) and not (bool(pellets.match(lines)) or bool(freezing.match(lines))):
precip_tf.append(100)
elif (bool(pellets.match(lines))) and not (bool(snow.match(lines)) or bool(freezing.match(lines))):
precip_tf.append(200)
elif (bool(freezing.match(lines))) and not (bool(snow.match(lines)) or bool(pellets.match(lines))):
precip_tf.append(300)
elif (bool(mix.match(lines))) and not (bool(freezing.match(lines)) or bool(snow.match(lines)) or bool(pellets.match(lines))):
precip_tf.append(400)
elif not (bool(mix.match(lines)) or bool(freezing.match(lines)) or bool(snow.match(lines)) or bool(pellets.match(lines))):
precip_tf.append(-999)
return(precip_tf)
打印(precip_extraction_function(taf))
答案 0 :(得分:1)
re.match
仅在字符串的开头匹配。要匹配字符串中的任何位置,您需要使用re.search
。例如(我并没有遵循您根据各种降水组合添加的数字代码,因此下面的示例仅每组输出一种或多种降水类型进行说明):
from pytaf import TAF
import re
values = "TAF KZZZ 072336Z 0800/0900 11006KT P6SM SN OVC060 FM080100 11006KT P6SM SN OVC060 FM080200 11006KT P6SM SN OVC060"
precip = {
'snow': r'SN',
'pellets': r'-PL|IC',
'freezing': r'FZRA|FZDZ',
'mix': r'RAPL|PLRA|SNPL|PLSN|SNFZDZ|SNFZRA|RASN|SNRA|DZSN|SNDZ'
}
precip_tf = []
precip_groups = TAF(values)._raw_weather_groups
for g in precip_groups:
precip_tf.append(' '.join([k for k, v in precip.items() if re.search(v, g)]))
print(precip_tf)
# ['snow', 'snow', 'snow']