正则表达式模式替换错误

时间:2014-02-13 05:53:23

标签: python regex replace

我正在尝试编写一些python代码,用于从文件名中删除邮件地址信息。我的代码来自本网站上的另一个问题。它似乎工作,但我在最后一行得到了关键错误。 作业类的变量是包含作业详细信息的字符串。 目前的早期阶段。

fileName = '73C Example St, Suburbia.txt'

rep = {
    job.street  :'',
    job.suburb  :'',
    job.town    :'',
    job.state   :'',
    job.num     :'',
    ' street'   :'',
    ' road'     :'',
    ' lane'     :'',
    ' place'    :'',
    ' court'    :'',
    ' drive'    :'',
    ' rd,'      :'',
    ' st,'      :'',
    ' pl,'      :'',
    ' cct,'     :'',
    ' ct,'      :''
    }

rep = dict((re.escape(k), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()), re.IGNORECASE)
fileName = pattern.sub(lambda m: rep[re.escape(m.group(0))], fileName)

错误是:

fileName = pattern.sub(lambda m: rep[re.escape(m.group(0))], fileName)
KeyError: '73c'

我不明白为什么这把钥匙会失败。

根据要求:

self.num = '73C'
self.street = 'Example'
self.suburb ='Suburbia'
self.town = 'Darwin'
self.state = 'NT'

1 个答案:

答案 0 :(得分:3)

你的正则表达式不区分大小写,但dict查找不是。看起来"73C"rep中的关键字,这使得正则表达式匹配"73c",但rep["73c"]KeyError

尝试

rep = dict((re.escape(k.lower()), v) for k, v in rep.iteritems())
pattern = re.compile("|".join(rep.keys()), re.IGNORECASE)
fileName = pattern.sub(lambda m: rep[re.escape(m.group(0).lower())], fileName)