【问题标题】:How to remove punctuation in python?如何在python中删除标点符号?
【发布时间】:2018-12-07 07:05:26
【问题描述】:

我有一个问题:

例如我有一句话

s = "AAA? BBB. CCC!" 

所以,我愿意:

import string
table = str.maketrans('', '', string.punctuation)
s = [w.translate(table) for w in s]

没关系。我的新句子是:

s = "AAA BBB CCC"

但是,如果我输入如下语句:

s = "AAA? BBB. CCC! DDD.EEE"

删除标点符号后,我将有以下相同的方法

s = "AAA BBB CCC DDDEEE"

但需要:

s = "AAA BBB CCC DDD EEE"

有什么想法/方法可以解决这个问题吗?

【问题讨论】:

  • @9769953 对不起!是我的错!我当然想全部删除! (编辑)
  • 为什么不只是 s = [ w if w not in string.punctuation else ' ' for w in s]
  • @Luv 这将导致最后一种情况,如果标点符号立即位于两个单词之间,它将合并单词
  • @casualcoder 否,因为您将标点符号替换为 ' ' 空格
  • @Luv mb,我没有看到' ' 中的空格,那么您有时会在单词之间有两个空格

标签: python string punctuation


【解决方案1】:

string.punctuation 包含以下字符:

'!"#$%&\'()*+,-./:;?@[\]^_`{|}~'

您可以使用 translate 和 maketrans 函数将标点符号映射到空值(替换)

import string

'AAA? BBB. CCC! DDD.EEE'.translate(str.maketrans('', '', string.punctuation))

输出:

'AAA BBB CCC DDDEEE'

【讨论】:

  • 我认为他要求不同的输出
【解决方案2】:

试试这个代码:

import re

input_str = "AAA? BBB. CCC! DDD.EEE"
output_str = re.sub('[^A-Za-z0-9]+', ' ', input_str)
print output_str

'AAA BBB CCC DDD EEE'

【讨论】:

  • 与上面@casualcoder 指出的问题相同。单词之间有多个空格。
  • 用它来覆盖一些边缘情况r'[^\w]+(\s+|$)',并添加.strip(),否则如果最后一个单词以标点符号结尾,您将有一个额外的空格。
  • Obs.:通过这种方式,您可以删除特殊字符,例如 ß 以及带有图形信号的字符,例如 ü,ú,.. 所以取决于您的语言不是一个好的选择。
【解决方案3】:

你也可以这样做:

punctuation = "!@#$%^&*()_+<>?:.,;"  # add whatever you want

s = "AAA? BBB. CCC!" 
for c in s:
    if c in punctuation:
        s = s.replace(c, "")

print(s)

>>> "AAA BBB CCC"

【讨论】:

    【解决方案4】:

    用途:

    import re
    
    " ".join(re.split('\W+', s))
    

    将字符串拆分为所有非单词字符,然后用单个空格连接各个子字符串。

    【讨论】:

      【解决方案5】:

      这是使用str.strip 和简单迭代的一种方法。

      例如:

      from string import punctuation
      
      s = "AAA? BBB. CCC! DDD.EEE"
      
      def cleanString(strval):
          return "".join(" " if i in punctuation else i for i in strval.strip(punctuation))
      
      s = " ".join(cleanString(i) for i in s.split())
      print(s)
      

      输出:

      AAA BBB CCC DDD EEE
      

      【讨论】:

        【解决方案6】:

        看看这个:

        if __name__ == "__main__":
            test_string = "AAA? BBB. CCC! DDD.EEE"
            result = "".join((char if char.isalpha() else " ") for char in test_string)
            print(result)
        
        
        Result: AAA  BBB  CCC  DDD EEE
        

        【讨论】:

        • 这会增加额外的空格。
        【解决方案7】:

        试试这个:

        import string
        exclude = set(string.punctuation)
        exclude.remove(".")
        doc = "AAA? BBB. CCC! DDD.EEE"
        for punctuation in exclude:
            doc = doc.replace(punctuation,"")
        doc = doc.replace("."," ")
        doc = doc.split()
        print(" ".join(doc))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-14
          • 2013-10-25
          • 2013-11-19
          • 1970-01-01
          • 1970-01-01
          • 2015-07-07
          相关资源
          最近更新 更多