2017-09-30 77 views
-1

對於此功能,我的代碼僅適用於此示例,但我不知道爲什麼它不適用於所有示例。誰能幫我?如何刪除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 

這是我的。

+0

如何使所有的例子和情況下,該功能的工作? – dg123

+0

發佈不起作用的示例可能會有幫助。 – mhawke

回答

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 == ' '取代char.isspace()


這裏是刪除使用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()) 
相關問題