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 и не могу обновить

0 ответов

Другие вопросы по тегам