Попробуйте следующее:
string[] inputs = { "href=\"http://yahoo.com/media/news.html\"", ">http://yahoo.com/media/news.html<" };
string pattern = @"(?:href=""|>)(?<Url>http://.+?)[<""]";
foreach (string input in inputs)
{
Match m = Regex.Match(input, pattern);
if (m.Success)
{
Console.WriteLine(m.Groups["Url"].Value);
}
}
РЕДАКТИРОВАТЬ: другой подход заключается в использовании осмотра, чтобы текст соответствовал, но не захватывался. Это позволяет вам использовать Match.Value
напрямую вместо использования групп. Попробуйте этот альтернативный подход ниже.
string pattern = @"(?<=href=""|>)http://.+?(?=<|"")";
foreach (string input in inputs)
{
Match m = Regex.Match(input, pattern);
if (m.Success)
{
Console.WriteLine(m.Value);
}
}
РЕДАКТИРОВАТЬ # 2: для запроса в комментариях здесь шаблон, который не будет соответствовать URL, которые содержат "..." в тексте.
string pattern = @"(?<=href=""|>)http://(?!.*\.{3}).+?(?=<|"")";
Единственное изменение - это добавление (?!.*\.{3})
, которое является негативным прогнозом, позволяющим совпадать с шаблоном, если указанный суффикс отсутствует. В этом случае он проверяет, что "..." отсутствует. Если вам нужно сопоставить хотя бы 3 точки, используйте {3,}
.