John
John

Reputation: 157

How to search for specific strings using Python and Regex

Honestly I have no clue why this isn't working I'm specifically trying to identify which code is

Thanks in advance.

Import Libraries

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(precip_extraction_function(taf))

Upvotes: 1

Views: 63

Answers (1)

benvc
benvc

Reputation: 15120

re.match only matches at the beginning of the string. To match anywhere in the string, you need to use re.search instead. For example (I wasn't following the numerical codes you are appending based on the various precipitation combos, so the example below just outputs one or more precipitation types per group to illustrate):

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']

Upvotes: 1

Related Questions