Есть много способов сделать это. Следующее использует обходные пути, чтобы соответствовать только части имени файла. Это на самом деле не позволяет /
, если это так:
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 ссылки
Вложения