【发布时间】: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)
有人可以帮我吗?
【问题讨论】:
如何删除除字母数字和重音符号之外的所有特殊字符?
我尝试了类似的方法:
text = 'abcdeáéí.@# '
re.sub(r'[^a-zA-Z0-9áéíóúÁÉÍÓÚâêîôÂÊÎÔãõÃÕçÇ: ]', ' ', text)
但我没有成功。以下表达式仅允许字母数字,但不允许重音:
tmp = re.sub(r'[^a-zA-Z0-9: ]', '', x)
有人可以帮我吗?
【问题讨论】:
将您的文本设为 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'
【讨论】:
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áéí