清理嵌套的re.sub语句

时间:2012-01-09 23:24:51

标签: python regex database

有人可以帮我在python中清理这个嵌套的正则表达式(re.sub)吗?我知道必须有更好的方法来做到这一点,但我无法弄清楚如何。

re.sub('.*Chairman.*','Executive Director',re.sub('.*Managing Director.*','Executive Director',row['capacity']))

我有一个字符串列(row ['capacity']),我从数据库中提取作为集合的一部分,我想迭代它,替换包含'主席'或'总经理的任何行当我把它写到集合中时,'与'执行董事'。

这是完整的代码行:

wrhkset = set (( row['organization'], row['lastname'], row['givenname'], re.sub('.*Chairman.*','Executive Director',re.sub('.*Managing Director.*','Executive Director',row['capacity'])) ) for row in wrhk)

注意:'wrhk'是列表的元组。如果有必要,我可以包含更多代码,但我真的只是希望有一种更简化的方法来处理我拥有的嵌套re.sub语句。

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以使用|通过“或”加入两个正则表达式:

re.sub(r'''(?x)
     .*(
     Chairman | Managing[]Director     # or
     ).*     
     ''','Executive Director', row['capacity'])

答案 1 :(得分:-1)

在@ ubuntu的响应基础上,我使用了OR运算符& re.compile:

patterns = re.compile('(.*Chairman.*)|(.*Managing Director.*)|(.*Chief Executive.*)|(.*CEO.*)')

然后:

wrhkset = set (( row['organization'], row['lastname'], row['givenname'], patterns.sub('Executive Director',row['capacity']) ) for row in wrhk)

通过这种方式,我可以继续添加模式而不会将我的设置线变为难以理解的混乱。

谢谢!