C#正则表达式,斜杠之间的文本

时间:2011-04-25 19:32:42

标签: c# regex

我在C#中有3种类型的字符串,我想使用正则表达式在斜杠之间检索文本

string type1 = "www.domain.com/category-name/1.html";

string type2 = "www.domain.com/category-name/sub-category-name/2.html";

string type3 = "www.domain.com/category-name/sub-category-name/sub-sub-category-name/3.html";

Q1)从type1变量我想在第一个和第二个斜杠'/'之间检索文本。我应该 category-name

Q2)从type2变量我想在第一个和第二个斜杠'/'之间检索文本,在第二个和第三个斜杠'/'之间检索文本。我应该类别名称子类别名称

Q3)从type3变量我希望在第一个和第二个斜杠'/'之间检索文本,在第二个和第三个斜杠'/'之间检索文本,在第三个和第四个斜杠'/'之间检索文本。我应该 category-name sub-category-name sub-sub-category-name

任何帮助将不胜感激

由于

5 个答案:

答案 0 :(得分:6)

您无需正则表达式即可使用,请查看String.Split方法和StringSplitOptions枚举。

string type1 = "www.domain.com/category-name/1.html";
string[] splicedUrl = type1.Split('/', StringSplitOptions.None);

if (splicedUrl.length > 0)
{
    // Access the correct index, check how many entries the array has etc.
}

您可能需要查看following post

答案 1 :(得分:2)

假设theString是您要解析的变量:

var tokens = theString.split('/');
if(tokens.length >= 2)
{
    string category = tokens[1];

    List<string> subCategories = new List<string>();
    for(int k = 2; k < tokens.length - 1; k++)
    {
        subCategories.Add(tokens[k]);
    }
}

答案 2 :(得分:2)

您还可以使用System.Uri执行以下操作:

Uri type1 = new Uri("http://www.domain.com/category-name/1.html");
var categoryNameType1 = type1.Segments[1];
Uri type2 = new Uri("http://www.domain.com/category-name/sub-category-name/2.html");
var categoryNameType2 = type2.Segments[1];
var subcategoryNameType2 = type2.Segments[2];

这可能比简单的string.Split()稍微复杂一些,但是如果你需要从像查询这样的URI中获取更多信息,你就可以轻松获得它。

答案 3 :(得分:1)

如果你真的觉得在这种情况下需要(误)使用正则表达式

/([\w-]+)(?=/)

应该做的伎俩。这假设斜杠之间的项是字母和连字符。

答案 4 :(得分:1)

这是另一种方法。这相当于你已经拥有的其他答案,但只是想发布它,因为它略有不同:

string url = "www.domain.com/category-name/1.html"
var splitted = url.Split('/');
var values = splitted.Skip(1).Take(splitted.Length - 2).ToArray();