替换字符串中多个字符的优雅解决方案

时间:2017-04-10 14:39:13

标签: python

我正在为使用定制软件许可证的人抓取一份Html报告,作为批量发送电子邮件的方式,要求在需要时释放许可证。

我将从html文件中读取的字符串拆分为一个列表,由换行符分隔,并.split()将我不需要的其他内容(如html格式,pc名等)拆分。

文件的输出如下:

["foo.bar", 'test.name', "john.doe"] etc.

我在每个名称的末尾添加了@[companyname].com,并将整个列表转换为字符串。然后,我来谈谈我的问题。我想摆脱列表中不需要的文本。如下图所示:

onlineUsers = str(userEmailAddress).replace(",",";").replace("[","").replace("]","").replace("'","")

我添加了以下浏览器弹出窗口,底部带有mailto链接:

webbrowser.open_new("mailto:" + onlineUsers)

一切都像梦一样,但是.replace()的链接真的让我感到烦恼。我环顾四周寻找更优雅的解决方案,但它们最终变得更加笨重,似乎就像在钉子上使用大锤一样。

是否有一种优雅的方式可以同时进行多次替换? 或者,至少,是否有更好的格式化方法?

2 个答案:

答案 0 :(得分:1)

为避免明确链接,您可以创建dict() 文本替换为键文本替换为值 t,类似于这个:

lst = ["blah[,].com", "gen@,]'com"]
rpl = {
    "," : ";",
    "[" : "",
    "]" : "",
    "'" : ""
}
lst1 = []
for lst_v in lst : 
    for k, v in rpl.items():
        lst_v = lst_v.replace(k, v)
    lst1.append(lst_v)
print lst1

这将导致:

['blah;.com', 'gen@;com']

答案 1 :(得分:0)

请同时阅读我对原始问题的评论。

至于仍然提供答案,我之前使用过的是:

for char in ['b\'', "\'", "\\n", '"', '[', ']', ',']: # Add any kind of char you would like to remove
    if char in targeted_variable_value:
        clean_output = targeted_variable_value.replace(char, "")