Вот выражение, которое я получил, основываясь на вашем, которое позволяет мне найти путь в windows: [a-zA-Z]:\\((?:[a-zA-Z0-9() ]*\\)*).*
.Пример его использования доступен здесь: https://regex101.com/r/SXUlVX/1
Сначала я изменил группу захвата с ([a-zA-Z0-9() ]*\\)*
на ((?:[a-zA-Z0-9() ]*\\)*)
.
Ваше оригинальное выражение захватывает каждое XXX\
один за другим (Например: Users\
the Users\
).
Шахт соответствует (?:[a-zA-Z0-9() ]*\\)*
.Это позволяет мне захватить конкатенацию XXX\YYYY\ZZZ\
перед захватом.Таким образом, он позволяет мне получить полный путь.
Второе изменение, которое я сделал, связано с именем файла: я просто сопоставлю любую группу символов, которая не содержит \
(группа захватажадный).Это позволяет мне позаботиться о странных именах файлов.
Другое регулярное выражение, которое будет работать, будет: [a-zA-Z]:\\((?:.*?\\)*).*
, как показано в этом примере: https://regex101.com/r/SXUlVX/2
На этот раз я использовал .*?\\
чтобы соответствовать XXX\
частям пути.
.*?
будет соответствовать не жадному способу: таким образом, .*?\\
будет соответствовать минимальному минимуму текста, за которым следует обратная косая черта.
Не стесняйтесь, если у вас есть какие-либо вопросы относительно выражений.
Я также рекомендую вам попытаться увидеть, насколько хорошо работает ваше выражение, используя: https://regex101.com.Здесь также есть список различных токенов, которые вы можете использовать в своем регулярном выражении.
Редактировать: Поскольку мой предыдущий ответ не сработал (хотя мне нужно будет потратить несколько раз, чтобы выяснить, почему именно), я посмотрелдля другого способа сделать то, что вы хотите.И мне удалось сделать это, используя разбиение и объединение строк.
Команда: "\\".join(TARGETSTRING.split("\\")[1:-1])
.
Как это работает: Размещает исходную строку в список подстрок на основе.Затем я удаляю первую и последнюю часть ([1:-1]
от 2-го элемента до элемента перед последним) и преобразую полученный список обратно в строку.
Это работает, независимо от того, является ли указанное значение путем илиполный адрес файла.Program Files (x86)\\Adobe\\Acrobat Distiller\\acrbd.exe fred
- это путь к файлу Program Files (x86)\\Adobe\\Acrobat Distiller\\acrbd.exe fred\
- это путь к каталогу