0

文字列(文)を受け取り、それをクリーンアップして、すべてのアルファベット、数字、およびハイフンを返す関数を作成しようとしています。ただし、コードはエラーのようです。私がここで間違っていることを親切に知ってください。

例:Blake D'souzaは!d!0tです。
返される必要があります:BlakeD'souzaはd0tです

Python:

def remove_unw2anted(str):
    str = ''.join([c for c in str if c in 'ABCDEFGHIJKLNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890\''])
    return str

def clean_sentence(s):
    lst = [word for word in s.split()]
    #print lst
    for items in lst:
        cleaned = remove_unw2anted(items)
    return cleaned

s = 'Blake D\'souza is an !d!0t'
print clean_sentence(s)
4

2 に答える 2

5

最後にクリーンアップされた単語のみを返します。

する必要があります:

def clean_sentence(s):
    lst = [word for word in s.split()]

    lst_cleaned = []
    for items in lst:
        lst_cleaned.append(remove_unw2anted(items))
    return ' '.join(lst_cleaned)

より短い方法はこれである可能性があります:

def is_ok(c):
    return c.isalnum() or c in " '"

def clean_sentence(s):
    return filter(is_ok, s)

s = "Blake D'souza is an !d!0t"
print clean_sentence(s)
于 2013-02-02T15:35:21.437 に答える
1

どちらを使用string.translateするのが利点ですか?簡単に拡張でき、の一部ですstring

import string

allchars = string.maketrans('','')

tokeep = string.letters + string.digits + '-'

toremove = allchars.translate(None, tokeep)

s = "Blake D'souza is an !d!0t"

print s.translate(None, toremove)

出力:

BlakeDsouzaisand0t

OPは、文字、数字、ハイフンのみを保持すると述べました。おそらく、空白も保持することを意味しているのでしょうか。

于 2013-02-02T19:14:09.493 に答える