Простой вопрос регулярных выражений для разбора похожих вещей в .NET? - PullRequest
1 голос
/ 05 марта 2010

Есть ли способ собрать все ссылки, которые имеют определенный домен, в строку, где они включают только те, которые являются:

href="http://yahoo.com/media/news.html"

или

>http://yahoo.com/media/news.html<

Таким образом, ссылки обычно имеют префикс href=" и заканчиваются "

или

ссылки, которые окружены ><.

Я пытался использовать Regex ( "href=\"([^\"]*)\"></A>" ), но ничего не подходило.

Ответы [ 3 ]

3 голосов
/ 05 марта 2010
(href="[^"]*")|(>[^<]*<)

Начинается с href = ", за которым следуют символы, не являющиеся", заканчивающиеся на "

или

Начинается с>, за которым следуют символы, не являющиеся <, заканчивающиеся на <</p>

3 голосов
/ 05 марта 2010

Попробуйте следующее:

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,}.

1 голос
/ 05 марта 2010

попробовать:

http=\"(.+)\"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...