RegEx从url中提取子级别

时间:2014-03-17 15:50:47

标签: c# regex

我有以下一组网址:

http://test/mediacenter/Photo Gallery/Conf 1/1.jpg
http://test/mediacenter/Photo Gallery/Conf 2/3.jpg
http://test/mediacenter/Photo Gallery/Conf 3/Conf 4/1.jpg

我想做的就是从网址中提取Conf 1,Conf 2,Conf 3,“照片库”之后的级别(网址不是静态的,它们共享的是照片库的共同级别)

感谢任何帮助

4 个答案:

答案 0 :(得分:1)

是否有必要使用正则表达式?你可以在不使用像这样的正则表达式的情况下获得它

string str= @"http://test/mediacenter/Photo Gallery/Conf 1/1.jpg";
var z=qq.Split('/')[5];

var x= new Uri(str).Segments[3];

答案 1 :(得分:1)

这应该是你:

var s = @"http://test/mediacenter/Photo Gallery/Conf 11/1.jpg";
var regex = new Regex(@"(Conf \d*)");
var match = regex.Match(s);
Console.WriteLine(match.Groups[0].Value); // Prints a

当然,你必须确信'Conf x'(其中x是一个数字)不会出现在URL的其他地方。

这将通过剥离示例中的多个文件夹(Conf 3 / Conf 4)来稍微改善它。

var regex = new Regex(@"((Conf \d*/*)+)");

它会留下尾随/

答案 2 :(得分:0)

尝试像这样的RegEx。

Conf[^\/]*

这应该为您提供URL的所有“Conf”部分。

我希望有所帮助。

答案 3 :(得分:0)

不需要正则表达式。

    string testCase = "http://test/mediacenter/Photo Gallery/Conf 1/1.jpg";
    string urlBase = "http://test/mediacenter/Photo Gallery/";

    if(!testCase.StartsWith(urlBase))
    {
        throw new Exception("URL supplied doesn't belong to base URL.");
    }

    Uri uriTestCase = new Uri(testCase);
    Uri uriBase = new Uri(urlBase);

    if(uriTestCase.Segments.Length > uriBase.Segments.Length)
    {
        System.Console.Out.WriteLine(uriTestCase.Segments[uriBase.Segments.Length]);
    }
    else
    {
        Console.Out.WriteLine("No child segment...");
    }