Python - Regex - 将一场比赛送入另一场比赛

时间:2017-08-03 15:30:53

标签: python regex

我有一个迭代字符串部分的函数,如果在字典中找到该部分,则将其替换为密钥:

def normalize(street):
            acronyms = {'AVE':'AVENUE', 'RD': 'ROAD', 'BLVD': 'BOULEVARD', 
            'PKWY': 'PARKWAY','HWY':'HIGHWAY', 'ST': 'STREET',
            'E': 'EAST','W':'WEST','S': 'SOUTH','N': 'NORTH'}
            return [re.sub(r"\b%s\b" %street_part, acronyms[street_part], 
            street) for street_part in street.split() if street_part in 
            acronyms]  

normalize('123 E MAIN AVE')
['123 EAST MAIN AVE', '123 E MAIN AVENUE']

而输出需要是: ['123 EAST MAIN AVENUE']

如何将每个返回值反馈给理解以进一步扩展?或者在理解中迭代迭代以获得最终的扩展地址?请协助。

2 个答案:

答案 0 :(得分:1)

除非你在这里有复杂的正则表达式模式,否则我建议只在生成器理解中索引到dict。

In [1051]: acronyms = ...

In [1052]: text = '123 E MAIN AVE'

In [1055]: ' '.join(acronyms.get(x, x) for x in text.split())
Out[1055]: '123 EAST MAIN AVENUE'

acronyms.get(x, x)会返回替换项(如果存在),或者只是重新回显原始字符串。

答案 1 :(得分:0)

将您的功能更改为:

def normalize(street):
        acronyms = {'AVE':'AVENUE', 'RD': 'ROAD', 'BLVD': 'BOULEVARD',\
                    'PKWY': 'PARKWAY','HWY':'HIGHWAY', 'ST': 'STREET',\
        'E': 'EAST','W':'WEST','S': 'SOUTH','N': 'NORTH'}
        for street_part in street.split():
            if street_part in acronyms:
                street = re.sub(r"\b%s\b" %street_part, acronyms[street_part], street)
        return street