2015-12-15 2 views
-2

Мне нужно сократить пути к файлу для отчета, над которым я работаю для NTFS и разрешений на совместное использование. Я пытаюсь удалить, например, \\ в дорожках общего доступа и C:\ в дорожках привода и заменить любые слэши после этого >. Мне также нужно сократить путь до последней папки, но с учетом пробелов и специальных символов. Между > и именем папки требуется пробел.Регулярное выражение для сокращения путей к файлам

Так, например, \\Finance\Accounts & Payroll\Sage становится >> Sage.

И D:\HR\Personnel\Records\Holidays\2015 становится >>>> 2015.

+0

Несколько сложнее сделать только одно (одно) регулярное выражение. Разве вы не можете сделать что-то сплит-соединение? На каком языке вы используете? – Biffen

+2

Можете ли вы добавить язык, который используете? –

ответ

1

Вот регулярное выражение на основе решения (что, по крайней мере работает с данными выборки):

echo '\Finance\Accounts & Payroll\Sage 
D:\HR\Personnel\Records\Holidays\2015' \ 
    | perl -pe 's/(^|[^\\]+)\\+/>/g; s/(>*)>/$1 /' 

>> Sage 
>>>> 2015 

(Ни один язык не был указан, так что я просто использовал мой личный фаворит Однако большинство реализаций регулярных выражений должны работать.)

Это немного взломать. Другим способом было бы что-то вроде (в псевдокоде):

parts = split(/\\+/, path) 
return ('>' × (parts.size - 2)) ⌢ ' ' ⌢ parts[-1] 

Имейте в виду, что хотя для Windows (и другие) обычно принимает / в качестве разделителя, а также. И что ни одно из приведенных выше не учитывает такие вещи, как .. и \.\. Нормализация пути сначала была бы хорошей идеей.

Смежные вопросы