Манипулирование строками в C #: обрезать путь, используя символы после каждого числового значения - PullRequest
3 голосов
/ 06 августа 2010

Учитывая входную строку, я хотел бы получить вывод из этого в указанном формате: filename;path.

Для входной строки /vob/TEST/.@@/main/ch_vobsweb/1/VOBSWeb/main/ch_vobsweb/4/VobsWebUI/main/ch_vobsweb/2/VaultWeb/main/ch_vobsweb/2/func.js

Я ожидаю эту выходную строку: func.js;VOBSWeb/VosWebUI/VaultWeb/func.js

Имя файла указано в конце всей строки, и его путь должен быть разделен с использованием символов после каждого числового значения (например, /1/VOBSWeb/, а затем /4/VobsWebUI, а затем/2/vaultWeb)

Ответы [ 3 ]

1 голос
/ 08 августа 2010

Если число путей произвольно, то вам нужен двухэтапный подход:


Сначала , удалите все "неинтересные вещи" из строки.

Найдите .*?/\d+/([^/]+/?) и замените все на $1.

В С #: resultString = Regex.Replace(subjectString, @".*?/\d+/([^/]+/?)", "$1");

В JavaScript: result = subject.replace(/.*?\/\d+\/([^\/]+\/?)/g, "$1");

Это преобразует вашу строку в VOBSWeb/VobsWebUI/VaultWeb/func.js.


Second , скопируйте имя файла в начало строки.

Найдите (.*/)([^/]+)$ и замените на $2;$1$2.

C #: resultString = Regex.Replace(subjectString, "(.*/)([^/]+)$", "$2;$1$2");

JavaScript: result = subject.replace(/(.*\/)([^\/]+)$/g, "$2;$1$2");

Это преобразует результат предыдущей операции в func.js;VOBSWeb/VobsWebUI/VaultWeb/func.js


Если число путей постоянно, то вы можете сделать это в одном регулярном выражении:

Поиск ^.*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+)

и заменить на $4;$1$2$3$4.

C #: resultString = Regex.Replace(subjectString, @"^.*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+/).*?/\d+/([^/]+)", "$4;$1$2$3$4");

JavaScript: result = subject.replace(/^.*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+\/).*?\/\d+\/([^\/]+)/g, "$4;$1$2$3$4");

Это регулярное выражение будет неэффективным, если строка не соответствует; это можно улучшить с помощью атомарной группировки, но JavaScript не поддерживает это.

0 голосов
/ 08 августа 2010

Предполагая, что это не произвольное количество путей, вы можете использовать регулярные выражения:

Найти это:

.*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z]*)/[^0-9]*[0-9]/([a-zA-Z.]*)/

Затем используйте группировки, чтобы написать новую строку:

\4;\1/\2/\3/\4
0 голосов
/ 07 августа 2010

Javascript имеет функцию split () для строк, которая возвращает массив, поэтому я думаю, что это, вероятно, хорошая отправная точка для того, что вы собираетесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...