Regex для извлечения ограниченного количества папок (3 верхних уровня) - PullRequest
1 голос
/ 14 марта 2012

Рассмотрим следующий путь к файлу:

\\fileserver\share\documents\department\my_project\a_sub_folder\myfile.doc

Мне нужно извлечь текст "\ documents \ отдела \ my_project" с помощью регулярного выражения.Подробности:

  • Исключить "fileserver" и "share"
  • Ограничить до 3 "логических" папок верхнего уровня после, исключая, таким образом, "\ a_sub_folder"
  • Don 't включить имя файла («myfile.doc»)

Используя следующее регулярное выражение ..:

^.*share(?P<folders>\\.+)\\.+

.. Я получаю это в своей группе «Папки»:

\documents\department\my_project\a_sub_folder

Что меня беспокоит, так это то, как избавиться от "a_sub_folder".Я попытался добавить операторы повторения в группу папок без эффекта:

^.*share(?P<folders>\\.+){1,3}\\.+
^.*share(?P<folders>\\.+){1,3}?\\.+

Первый из двух приведенных выше не меняет вывод, а второй возвращает пустую группу «папки»

У меня такое чувство, что мое регулярное выражение в корне неверно, но я не могу понять, почему.Может кто-нибудь, пожалуйста, пролить свет на это?

спасибо:)

/ Geir

1 Ответ

1 голос
/ 14 марта 2012

Как насчет:

^.*share(?P<folders>(?:\\[^\\]+){1,3})
...