【问题标题】:Python regex to remove punctuation except from URLs and decimal numbersPython 正则表达式从 URL 和十进制数字中删除标点符号
【发布时间】:2017-02-13 01:26:44
【问题描述】:

人,

我需要一个正则表达式从字符串中删除标点符号,但保留重音符号和 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 teste com acentuação. Para pontuação também!#python @stackoverflow http://xyhdhz.com.br" 应该是 "Apenas um teste com acentuação Para pontuação também #python @stackoverflow http://xyhdhz.com.br"

我该怎么做?

【问题讨论】:

  • 您应该提供您尝试过的代码、一两个输入示例以及所需的输出。
  • @trincot 谢谢。我编辑了主帖。

标签: python regex nltk


【解决方案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 测试)

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

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

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

【讨论】:

  • 谢谢。由于提及,我无法在此处正确输出。我会把它放在原帖中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2017-11-11
  • 2017-08-24
相关资源
最近更新 更多