在Django中从字符串中删除特殊字符

3 投票
3 回答
6157 浏览
提问于 2025-04-17 15:05

我想把电子邮件中的所有特殊字符,比如'@'和'.',都去掉,换成'_'(下划线)。在Python里有一些函数,比如unidecode,但它不能完全满足我的需求。有没有人能给我一些建议,让我可以在字符串中找到这些字符,并把它们替换成'_'呢?

谢谢!

3 个回答

1

把这个当作一个指南:

import re
a = re.sub(u'[@]', '"', a)

语法:

re.sub(pattern, repl, string, max=0)
1

这是来自《Python Cookbook》第2版的一个很棒的例子。

import string
def translator(frm='', to='', delete='', keep=None):
    if len(to) == 1:
        to = to * len(frm)
    trans = string.maketrans(frm, to)
    if keep is not None:
        allchars = string.maketrans('', '')
        delete = allchars.translate(allchars, keep.translate(allchars, delete))
    def translate(s):
        return s.translate(trans, delete)
    return translate


remove_cruft = translator(frm="@-._", to="~")
print remove_cruft("me-and_you@gmail.com")

输出结果:

me~and~you~gmail~com

这是一个很实用的字符串工具,可以放在你的工具箱里。

所有的荣誉归于这本书

5

为什么不使用 .replace() 呢?

比如说:

a='testemail@email.com'
a.replace('@','_')
'testemail_email.com'

如果你想同时修改多个地方,你可以试试这样做:

a='testemail@email.com'
replace=['@','.']
for i in replace:
  a=a.replace(i,'_')

撰写回答