сопоставление повторяющейся группы с использованием регулярных выражений - PullRequest
1 голос
/ 15 марта 2010

Я пытаюсь перехватить URL-адреса на html-странице, которая повторяется, и обычно она работает, когда URL-адреса находятся в разных строках, но в этом случае они отображаются в одной строке и в отдельных строках.URL содержит теги: http://something/profile'> Вот что я пробовал

Dim regex As Regex = New Regex( _
                            ".*<a.*href='http://(?<Link>.*?)/profile'>", _
                            RegexOptions.IgnoreCase _
                            Or RegexOptions.CultureInvariant _
                            Or RegexOptions.IgnorePatternWhitespace _
                            Or RegexOptions.Compiled _
                            )


            Dim ms As MatchCollection = regex.Matches(_html)
            Dim url As String = String.Empty
            For Each m As Match In ms
                url = m.Groups("Link").Value.ToLower

Любые идеи приветствуются.

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

Нет необходимости использовать Regex, чтобы попытаться проанализировать HTML, когда есть фантастическая библиотека под названием HTML Agility Pack . Эта библиотека облегчает поиск ссылок и будет корректно обрабатывать особые случаи, когда ваше регулярное выражение потерпит неудачу. Вы получите более надежное решение с меньшими усилиями.

Этот пример кода, демонстрирующий использование библиотеки, написан на C #, но, надеюсь, он поможет вам построить решение в VB.NET:

.
HtmlDocument doc  = new HtmlDocument();
doc.Load("input.html");
foreach (var link in doc.DocumentNode.Descendants("a"))
{
    string href = link.Attributes["href"].Value;
    Match match = Regex.Match(href, "^http://(?<Link>.*?)/profile$");
    if (match.Success)
    {
        Console.WriteLine(match.Groups["Link"].Value);
    }
}
1 голос
/ 15 марта 2010

Возможно, вам понадобится добавить RegexOptions.SingleLine. Из документов:

Указывает однострочный режим. изменения смысл точки (.) так что соответствует каждому символу (вместо каждый символ, кроме \ n).

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