【问题标题】:Regular Expression - Remove all special characters except alphanumeric and accents正则表达式 - 删除除字母数字和重音符号外的所有特殊字符
【发布时间】:2012-10-06 10:19:10
【问题描述】:

如何删除除字母数字和重音符号之外的所有特殊字符?

我尝试了类似的方法:

text = 'abcdeáéí.@# '
re.sub(r'[^a-zA-Z0-9áéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ: ]', ' ', text)

但我没有成功。以下表达式仅允许字母数字,但不允许重音:

tmp = re.sub(r'[^a-zA-Z0-9: ]', '', x)

有人可以帮我吗?

【问题讨论】:

    标签: python regex


    【解决方案1】:

    将您的文本设为 unicode 字符串 text = u'abcdeáéí.@# ' 并确保您的模式也能够接受 unicode 字符 re.sub(u'[^a-zA-Z0-9áéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ: ]', ' ', text)

    通过这种组合,我得到u'abcde\xe1\xe9\xed ' 结果(其中\xe1 等是text 中重音字符的转义码

    如果您不转义任何字符,则无需在模式前面使用r。它在那里,所以你可以写 r'\d\w' 之类的东西,而不是 '\\d\\w'

    【讨论】:

    • 这是什么版本的 Python?据我所知,Python 2 的正则表达式引擎不支持 unicode。
    • Python 2.7.3(默认,2012 年 7 月 16 日,13:05:29)[GCC 4.5.3] on linux2
    • 这很奇怪。我做了完全相同的更改,最后的字符串没有重音字符:print re.sub(u'[^a-zA-Z0-9áéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ: ]'.encode('utf-8'), ' ', u'abcdeáéí.@# ')。没有.encode('utf-8'),脚本不会运行。
    • 我收到abcde 和你的sn-p。然而>>> print re.sub(u'[^a-zA-Z0-9áéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ: ]', ' ', u'abcdeáéí.@# ') 导致abcdeáéí
    猜你喜欢
    • 2014-01-10
    • 2014-03-16
    • 2023-03-11
    • 1970-01-01
    • 2015-10-16
    • 2011-10-02
    • 2021-10-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多