Python 2: регулярное выражение для отклонения имен каталогов Windows, начинающихся с (белых) пробелов и заканчивающихся (белыми) пробелами или точками
Я хочу сопоставить имя каталога Windows. В основном escape-символы
\n\t...
плюс 9 символов
\/:*?"<>|
будут запрещены.
РЕДАКТИРОВАТЬ
Речь идет о более широком плане: проверить полные, абсолютные пути к файлам Windows, как здесь:
Сначала я хотел разгадать загадку имени каталога, так что да, регулярное выражение, похоже, путь.
ИЗМЕНИТЬ КОНЕЦ
Мое регулярное выражение:
windows_dir_name = r"[^\n\r\t\b\0\\/:*?\"<>|]+"
Теперь я хочу поддержать отклонение имен каталогов, которые начинаются с пробелов, и тех, которые заканчиваются пробелами и / или точками. Вы можете попробовать это, создав новую папку в Windows вручную через "Новая папка...". Все, что начинается с пробелов или заканчивается пробелами или точками, будет обрезано.
(В прошлом даже ведущие точки в именах каталогов Windows не работали. Это было исправлено в Windows 10 несколько месяцев назад, см. Https://www.ghacks.net/2019/02/25/windows-10-1903- поддержка-для-имен-файлов-и-папок-с-начальным-точкой-символом /.)
Я расширил регулярное выражение до:
windows_dir_name = r"\S*[^\n\r\t\b\0\\/:*?\"<>|]+[^\s\.]*"
Тестовую строку следует отклонить (используя
re.match(windows_dir_name + "$", text_entry_dir_name)
, но это не так:
text_entry_dir_name = " bb " # not rejected
Проблема с регулярным выражением, похоже, заключается в том, что средняя часть
[^\n\r\t\b\0\\/:*?\"<>|]+
позволяет пробелы, и эта группа, кажется, берет пробелы из тестовой строки, считая их действительными. Я пробовал использовать нежадный
?
char, в результате чего
[^\n\r\t\b\0\\/:*?\"<>|]+?
, но это тоже не работает.
ВОПРОС:
Как изменить регулярное выражение, чтобы отклонить указанную выше строку имен директорий (которая фактически заключена в обратную косую черту, например
C:\foo\ bb \bar\lolo
)?
Я также пробовал несколько других вещей, даже с https://regex101.com/r/RWWNgZ/4 (пример обрабатывает только префикс для простоты), но безрезультатно. Я также пробовал использовать Regex, который проверяет, что строка не должна начинаться или заканчиваться пробелом и не должна заканчиваться точкой (.), Но я не могу этого сделать.
Что мне не хватает?
Обратите внимание, что пробелы между
bb
символы считаются действительными.
PS: я использую Python 2.7 и не могу обновить