文字列があり、英数字でもこのセットでもないすべての文字を削除しようとしています
'''!$%*()_-=+\/.,><:;'"?|'''.
これにより、英数字以外の文字がすべて削除されることはわかっていますが、どうすれば改善できますか?
re.sub(r'\W+','',line)
Python 2.x 非正規表現ソリューション:
punctuation = '''!$%*()_-=+\/.,><:;'"?|'''
allowed = string.digits + string.letters + punctuation
filter(allowed.__contains__, s)
フィルタリングする文字列はs
. (これはおそらく、長い文字列に対する最速のソリューションではありません。)
このスレッドの功績により: Python の文字列から特定の文字を削除する
まず、すべての句読点を手動で再入力する必要はありません。string モジュールは、便宜上 string.punctuation をプロパティとして定義しています。(利用help(string)
可能な他の同様の定義を表示するために使用します)
>>> import string
>>>string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
解決策を正確に適用するには、望ましくない文字を定義するために少し手間がかかります。大きな欠点は、この形式では、削除するように指示した文字のみが削除されることです。ファイルが 100% ASCII 文字であることが確実な場合は、次のように定義できます。
>>> delchars = ''.join(c for c in map(chr, range(256)) if c not in (string.punctuation + string.digits + string.letters) )
文字を除外することで、文字をフィルタリングできます。
>>> text.translate(None, delchars)
編集: さまざまなメソッドの興味深いタイミング情報を次に示します: Python の文字列から英数字以外のすべてを削除する
Python 3.x では、translate
string に対してメソッドを使用して、不要な文字を削除できます。
>>> def remove(string, characters):
return string.translate(str.maketrans('', '', characters))
>>> import string
>>> remove(string.printable, string.ascii_letters + string.digits + \
'''!$%*()_-=+\/.,><:;'"?|''')
'#&@[]^`{}~ \t\n\r\x0b\x0c'