テストしている文字列は[\w-]+
。許可されていない文字のリストを作成してテストする代わりに、Pythonで文字列がこれに準拠しているかどうかをテストできますか?
正規表現に対して文字列をテストする場合は、 re ライブラリを使用します
import re
valid = re.match('^[\w-]+$', str) is not None
Pythonにも正規表現があります。
import re
if re.match('^[\w-]+$', s):
...
または、許可文字のリストを作成することもできます。
from string import ascii_letters
if all(c in ascii_letters+'-' for c in s):
...
純粋なpythonだけを使用してモジュールをインポートせずに、ダッシュ以外のアルファ、数字を削除します。
string = '#Remove-*crap?-from-this-STRING-123$%'
filter_char = lambda char: char.isalnum() or char == '-'
filter(filter_char, string)
# This returns--> 'Remove-crap-from-this-STRING-123'
または1行で:
''.join([c for c in string if c.isalnum() or c in ['-']])
文字列にonly英数字とダッシュが含まれているかどうかをテストするには、次のようにします
import re
found_s = re.findall('^[\w-]+$', s)
valid = bool(found_s) and found_s[0] == s