使用正则表达式匹配.html之前和之后的文本/

时间:2010-06-12 04:04:54

标签: c# .net regex url

使用此字符串

http://sfsdf.com/sdfsdf-sdfsdf/sdf-as.html

我需要sdf-as

用这个

hellow-1/yo-sdf.html

我需要yo-sdf

5 个答案:

答案 0 :(得分:3)

这应该让你想要你需要:

Regex re = new Regex(@"/([^/]*)\.html$");
Match match = re.Match("http://sfsdf.com/sdfsdf-sdfsdf/sdf-as.html");
Console.WriteLine(match.Groups[1].Value); //Or do whatever you want with the value

这需要文件顶部的using System.Text.RegularExpressions;才能正常工作。

答案 1 :(得分:3)

有很多方法可以做到这一点。以下使用lookarounds仅匹配文件名部分。如果是这样的话,它实际上不允许/

string[] urls = {
   @"http://sfsdf.com/sdfsdf-sdfsdf/sdf-as.html",
   @"hellow-1/yo-sdf.html",
   @"noslash.html",
   @"what-is/this.lol",
};

foreach (string url in urls) {
   Console.WriteLine("[" + Regex.Match(url, @"(?<=/|^)[^/]*(?=\.html$)") + "]");
}

打印:

[sdf-as]
[yo-sdf]
[noslash]
[]

模式如何工作

共有3个部分:

  • (?<=/|^):一个积极的观察背后断言我们前面有一个斜杠/,或者我们在字符串的开头
  • [^/]*:匹配除斜线之外的任何内容
  • (?=\.html$):一个积极的先行者断言我们跟着".html"(字面意思是点)

参考


非正则表达式替代

知道正则表达式是好的,它可以做很棒的事情,但你应该总是知道如何在没有它的情况下进行基本的字符串操作。这是一个非正则表达式的解决方案:

static String getFilename(String url, String ext) {
   if (url.EndsWith(ext)) {
     int k = url.LastIndexOf("/");
     return url.Substring(k + 1, url.Length - ext.Length - k - 1);
   } else {
     return "";
   }
}

然后你将其称为:

getFilename(url, ".html")

API链接


附件

答案 2 :(得分:1)

试试这个:

string url = "http://sfsdf.com/sdfsdf-sdfsdf/sdf-as.html";
Match match = Regex.Match(url, @"/([^/]+)\.html$");
if (match.Success)
{
    string result = match.Groups[1].Value;
    Console.WriteLine(result);
}

结果:

sdf-as

但是,最好使用System.URI类来解析字符串,以便正确处理http://example.com/foo.html?redirect=bar.html之类的内容。

答案 3 :(得分:0)

using System.Text.RegularExpressions;
Regex pattern = new Regex(".*\/([a-z\-]+)\.html");
Match match = pattern.Match("http://sfsdf.com/sdfsdf-sdfsdf/sdf-as.html");
if (match.Success)
{
    Console.WriteLine(match.Value);
}
else
{
    Console.WriteLine("Not found :(");
}

答案 4 :(得分:0)

这个使斜杠和点部分可选,并允许文件具有任何扩展名:

new Regex(@"^(.*/)?(?<fileName>[^/]*?)(\.[^/.]*)?$", RegexOptions.ExplicitCapture);

但我仍然更喜欢Substring(LastIndexOf(...)),因为它更具可读性。