Skip to main content
 首页 » 编程设计

c#之如何使用正则表达式和 C# 提取特定的 URL 段

2024年02月04日38Free-Thinker

我有那种 URL:

/domain.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext

有时

http://someother.com/segment1/segment2/segment3/segment4/segment5/segment6/segment7/filename.ext

我需要专门使用 C# 和 Regex 提取第 6 段。正则表达式是绝对必要的,因为我将来可能想通过更改一些配置来提取段 3。

请您参考如下方法:

尽管您最好选择与 URL 相关的类来解析 URL,如另一个答案中所述,因为内置函数已被证明并经过良好测试,甚至可以处理极端情况,但正如您提到的,您有一些限制,只能使用正则表达式解决方案,您可以尝试以下解决方案。

使用这个正则表达式可以很容易地找到第六个或第 N 个片段,

(?:([^/]+)/){7} 

它捕获 6+1(N+1 通常用于第 N 个段,其中 +1 用于匹配 URL 的域部分)段并且该组保留最后捕获的值,可以使用 group1 访问该值。

此处,([^/]+) 匹配一个或多个除/ 之外的任何字符,并捕获group1 中紧跟/ 的内容> 并且整个匹配恰好 7 次。

Regex Demo

C# code demo

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