Хотя лучше использовать классы, связанные с URL, для анализа URL, как объяснено в другом ответе, поскольку встроенные функции проверены и хорошо протестированы для обработки даже угловых случаев, но, как вы упомянули, у вас есть некоторые ограничения и вы можете использовать только regex solution, вы можете попробовать следующее решение.
С помощью этого регулярного выражения можно легко найти шестой или N-й сегмент,
(?:([^/]+)/){7}
, который захватывает 6 + 1 (N + 1 в целом для N-го сегмента, где +1 - для соответствующей доменной части URL-адреса), а группа сохраняет последнее захваченное значение, к которому можно получить доступ с помощью group1.
Здесь ([^/]+)
соответствует одному или нескольким любым символам, кроме /
, и захватывает содержимое в group1, за которым следует /
, и все это соответствует ровно 7 раз.
Regex Demo
C # код демо
var pattern = "(?:([^/]+)/){7}";
var match = Regex.Match("/domain.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext", pattern);
Console.WriteLine("Segment: " + match.Groups[1].Value);
match = Regex.Match("http://someother.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext", pattern);
Console.WriteLine("Segment: " + match.Groups[1].Value);
Печатает значение шестого сегмента,
Segment: segment6
Segment: segment6