0

以下のリストのすべての文字を取得するには、正規表現を記述する必要があります.. (リストにないすべての文字を削除します)

allow_characters = "#.-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"

どうすればよいかわかりません。re.match または re.findall または re.sub を使用する必要がありますか?

よろしくお願いします。

4

1 に答える 1

7

正規表現はまったく使用しないでください。最初に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)
于 2013-10-25T22:11:32.310 に答える