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

3
我想从电子邮件中删除所有特殊字符,例如“@”、“.”并用“下划线”替换它们。 在Python中有一些函数可以实现这一功能,如'unidecode',但它不能完全满足我的要求。有人能建议我一种方法,以便我可以在字符串中找到上述提到的字符,并用“下划线”替换它们。
谢谢。
3个回答

5
为什么不使用.replace()方法?
例如:
a='testemail@email.com'
a.replace('@','_')
'testemail_email.com'

而要编辑多个,您可能可以尝试像这样做:
a='testemail@email.com'
replace=['@','.']
for i in replace:
  a=a.replace(i,'_')

但是替换函数只接受两个参数 txt.replace('@','_'),如果我想要移除多个字符怎么办? - undefined

1
将此作为指南:
import re
a = re.sub(u'[@]', '"', a)

语法:

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

嗨Cathy,替换比子串更快。 - undefined
谢谢,它有效,但是相反...它将 email@gmail.com 替换为 **"""""@"""""."""**。 - undefined
1
请查看这个链接 - undefined
@Jonathan 是的,它有效,但是replace函数只接受两个参数 txt.replace('@','_' ) 如果我想要移除多个字符怎么办? - undefined
2
根据@Inforian想要做什么,与其指定一个包含“特殊”字符的字符类,倒不如指定一个“非特殊字符”的否定字符类可能更容易。例如,如果我们将“特殊字符”定义为任何不是罗马字母或数字的字符,那么类似于re.sub(r'[^a-zA-Z0-9]', '_', email)的代码应该将an-example@example.com转换为an_example_example_com - undefined

1

Python Cookbook第二版的一个很好的例子

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

这是一个非常实用的字符串工具,值得加入你的工具包。

所有功劳归 该书 所有。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接