Python正则表达式,用于删除除URL和十进制数之外的标点符号

时间:2016-10-04 18:56:03

标签: python regex nltk

人,

我需要一个正则表达式来删除字符串中的标点符号,但保留重音符号和URL。我还必须保留该字符串中的提及和标签。

我尝试使用上面的代码但不幸的是,它用重音替换了字符,但我想保留重音。

import unicodedata

if __name__ == "__main__":
    text = "Apenas um teste com acentuação. Para pontuação também! #python @stackoverflow http://xyhdhz.com.br" 
    text = unicodedata.normalize('NFKD', text).encode('ascii','ignore')
    print text

以下文字的输出“Apenas um testecomacentuação.Parapontuaçãonmbém!#python @stoveroverflow http://xyhdhz.com.br应为“Apenas um testecomagenuaçãoParapontuação também#python @stackoverflow http://xyhdhz.com.br

我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

您可以使用Python regex modulere.sub()来替换您想要删除的任何字符。您可以使用黑名单并替换您不想要的所有字符,也可以使用您想要允许的所有字符的白名单,只保留这些字符。

这将删除括号中的字符类中的任何内容:

import re

test = r'#test.43&^%à, è, ì, ò, ù, À, È, Ì, Ò, ÙÃz'
out = re.sub(r'[/.!$%^&*()]', '', test)
print(out)
# Out: #test43à è ì ò ù À È Ì Ò ÙÃz

(使用Python 3.5测试)

要保留网址,您需要进行更多处理以检查该格式(这种格式非常多样)。在这种情况下,您在寻找什么样的输入/输出?

编辑:根据您添加的输入示例:

test = "Apenas um teste com acentuação. Para pontuação também! #python @stackoverflow" 
# Out: Apenas um teste com acentuação Para pontuação também #python @stackoverflow