Как искать конкретные строки, используя Python и Regex - PullRequest
1 голос
/ 12 марта 2019

Честно говоря, я понятия не имею, почему это не работает. Я специально пытаюсь определить, какой код

  • снег (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)

print (осадка_экстракции_функция (taf))

1 Ответ

1 голос
/ 12 марта 2019

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']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...