从字符串中删除标点符号的最佳方法

為{幸葍}努か 提交于 2020-01-07 01:44:17

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

似乎应该有一个比以下方法更简单的方法:

import string
s = "string. With. Punctuation?" # Sample string 
out = s.translate(string.maketrans("",""), string.punctuation)

在那儿?


#1楼

我喜欢使用这样的功能:

def scrub(abc):
    while abc[-1] is in list(string.punctuation):
        abc=abc[:-1]
    while abc[0] is in list(string.punctuation):
        abc=abc[1:]
    return abc

#2楼

如果您知道正则表达式,就足够简单了。

import re
s = "string. With. Punctuation?"
s = re.sub(r'[^\w\s]','',s)

#3楼

对于Python 3 str或Python 2 unicode值, str.translate()仅采用字典; 在该映射中查找代码点(整数),并删除所有映射为None内容。

然后,要删除(某些?)标点符号,请使用:

import string

remove_punct_map = dict.fromkeys(map(ord, string.punctuation))
s.translate(remove_punct_map)

dict.fromkeys()类方法使创建映射变得很简单,根据键序列将所有值设置为None

要删除所有标点符号,而不仅仅是ASCII标点符号,您的表需要更大一些。 参见JF Sebastian的答案 (Python 3版本):

import unicodedata
import sys

remove_punct_map = dict.fromkeys(i for i in range(sys.maxunicode)
                                 if unicodedata.category(chr(i)).startswith('P'))

#4楼

myString.translate(None, string.punctuation)

#5楼

如果您对re家族更加熟悉,则不一定会更简单,但会采用另一种方式。

import re, string
s = "string. With. Punctuation?" # Sample string 
out = re.sub('[%s]' % re.escape(string.punctuation), '', s)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!