人,
我需要一个正则表达式来删除字符串中的标点符号,但保留重音符号和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“
我怎么能这样做?
答案 0 :(得分:1)
您可以使用Python regex module和re.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