Я не буду использовать регулярное выражение для этого. Единственное сложное требование - это простое пространство, но это тоже можно сделать.
import string
whitelist = set(string.ascii_letters + string.digits)
good_filename = "herearesomelettersand123numbers andonespace"
bad_filename = "symbols&#! and more than one space"
def strip_filename(fname, whitelist):
"""Strips a filename
Removes any character from string `fname` and removes all but one
whitespace.
"""
whitelist.add(" ")
stripped = ''.join([ch for ch in fname if ch in whitelist])
split = stripped.split()
result = " ".join([split[0], ''.join(split[1:])])
return result
Затем вызовите его:
good_sanitized = strip_filename(good_filename, whitelist)
bad_sanitized = strip_filename(bad_filename, whitelist)
print(good_sanitized)
# 'herearesomelettersand123numbers andonespace'
print(bad_sanitized)
# 'symbols andmorethanonespace'
так (один) пробельные является обязательным в имени файла? –
Посмотрите на это [ответ] (http://stackoverflow.com/questions/29998052/deleting-consonants-from-a-string-in-python/29998062#29998062), который имеет около 8 различных способов проверки и удаление определенных символов. –
@PruthviRaj, ну просто, чтобы избежать грязных имен, да. – Jand