以下のリストのすべての文字を取得するには、正規表現を記述する必要があります.. (リストにないすべての文字を削除します)
allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
どうすればよいかわかりません。re.match または re.findall または re.sub を使用する必要がありますか?
よろしくお願いします。
正規表現はまったく使用しないでください。最初にallow_characters
セットに変換して''.join()
から、不要な文字を削除するジェネレータ式を使用してください。変換している文字列が呼び出されると仮定しますs
:
allow_char_set = set(allow_characters)
s = ''.join(c for c in s if c in allow_char_set)
そうは言っても、これが正規表現でどのように見えるかは次のとおりです。
s = re.sub(r'[^#.\-_a-zA-Z0-9]+', '', s)
文字列をこの正規表現に変換することもできますがallow_characters
、最初の解決策ははるかに簡単だと思います。
編集:コメントでDSMが指摘したstr.translate()
ように、このようなことを行うには非常に良い方法です。この場合、少し複雑ですが、次のように使用できます。
import string
allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
all_characters = string.maketrans('', '')
delete_characters = all_characters.translate(None, allow_characters)
s = s.translate(None, delete_characters)