如何删除python中的非字母数字

时间:2017-09-30 00:53:14

标签: python

对于此函数,我的代码仅适用于此示例,但我不知道为什么它不适用于所有示例。任何人都可以帮助我吗?

def remove_punctuation(s):
    '''(str) -> str
    Return s with all non-space or non-alphanumeric
    characters removed.
    >>> remove_punctuation('a, b, c, 3!!')
    'a b c 3'
    '''
    new_str = ''
    for char in s:
        if char.isdigit() or char.isalpha():
            new_str = new_str + char + " "
    new_s = new_str[:len(new_str)-1]
    return new_s

这就是我所拥有的。

1 个答案:

答案 0 :(得分:0)

由于这条线

new_str = new_str + char + " "

您的代码总是在每个保留字符后添加一个空格。因此,字母数字字符的运行最终会有空格。

你的函数不起作用的另一个例子是字符串中有多个空格,例如'a, b, c, 3!! '。根据你的描述,空间应该保留。

您的函数还可以使用isspace()检查字符是否为空格。这将包括空格字符,标签,新行等:

def remove_punctuation(s):
    '''(str) -> str
    Return s with all non-space or non-alphanumeric
    characters removed.
    >>> remove_punctuation('a, b, c, 3!!')
    'a b c 3'
    '''
    new_str = ''
    for char in s:
        if char.isalnum() or char.isspace():
            new_str = new_str + char
    return new_str

print(repr(remove_punctuation('a, b, c, 3!!')))
print(repr(remove_punctuation('a,    b, c, 3!!')))

输出:

'a b c 3'
'a    b c 3'

如果您只想保留空格字符,则可以将char.isspace()替换为char == ' '

以下是使用str.join()和列表理解/生成器表达式从字符串中删除字符的常用方法:

def remove_punctuation(s):
    '''(str) -> str
    Return s with all non-space or non-alphanumeric
    characters removed.
    >>> remove_punctuation('a, b, c, 3!!')
    'a b c 3'
    '''
    return ''.join(c for c in s if c.isalnum() or c.isspace())