Сведения о вопросе

Gaukhar

15:52, 20th August, 2020

Теги

html   regex    

Regex парсить ссылки и описания

Просмотров: 467   Ответов: 6

C#: что такое хороший Regex для разбора гиперссылок и их описания?

Пожалуйста, обратите внимание на нечувствительность к регистру, пробелы и использование одинарных кавычек (вместо двойных кавычек) вокруг тега HREF.

Пожалуйста, также рассмотрите возможность получения гиперссылок, которые имеют другие теги в пределах <a> тегов, таких как <b> и <i> .



  Сведения об ответе

Chhiki

16:59, 25th August, 2020

Пока нет вложенных тегов (и разрывов строк), хорошо работает следующий вариант:

<a\s+href=(?:"([^"]+)"|'([^']+)').*?>(.*?)</a>

Как только в игру вступают вложенные теги, регулярные выражения становятся непригодными для синтаксического анализа. Однако вы все еще можете использовать их, применяя более продвинутые функции современных интерпретаторов (в зависимости от вашей машины regex). E.g. .NET регулярные выражения используют стек; я нашел это:

(?:<a.*?href=[""'](?<url>.*?)[""'].*?>)(?<name>(?><a[^<]*>(?<DEPTH>)|</a>(?<-DEPTH>)|.)+)(?(DEPTH)(?!))(?:</a>) 

Источник: http://weblogs.asp.net/scottcate/archive/2004/12/13/281955.aspx


  Сведения об ответе

PROGA

11:44, 27th August, 2020

Смотрите этот пример из StackOverflow: регулярное выражение для разбора ссылок с веб-страницы?

С помощью пакета HTML Agility Pack вы можете разобрать html и извлечь детали, используя семантику HTML, вместо сломанного regex.


  Сведения об ответе

9090

16:11, 23rd August, 2020

Я нашел это , но, по-видимому, у этих парней были некоторые проблемы с этим.

Edit: (это работает!)
Теперь я сделал свое собственное тестирование и обнаружил, что оно работает, я не знаю C#, поэтому я не могу дать вам ответ C#, но я знаю PHP, и вот массив совпадений, который я получил от запуска его на этом:

<a href="pages/index.php" title="the title">Text</a>

array(3) { [0]=> string(52) "Text" [1]=> string(15) "pages/index.php" [2]=> string(4) "Text" } 


  Сведения об ответе

VCe znayu

18:33, 12th August, 2020

У меня есть regex , который обрабатывает большинство случаев, хотя я считаю, что он соответствует HTML в многострочном комментарии.

Он написан с использованием синтаксиса .NET, но должен быть легко переводимым.


  Сведения об ответе

lool

04:54, 1st August, 2020

Вот регулярное выражение, которое будет соответствовать сбалансированным тегам.

(?:""'[""'].*?>)(?(?>(?) |(?<-DEPTH>)|.)+) (?(DEPTH)(?!)) (?:)


  Сведения об ответе

dump

09:40, 14th August, 2020

Просто собираюсь выбросить этот фрагмент теперь, когда у меня есть working..this-это менее жадная версия одного из предложенных ранее. Оригинал не будет работать, если входные данные содержат несколько гиперссылок. Этот код ниже позволит вам перебирать все гиперссылки:

static Regex rHref = new Regex(@"<a.*?href=[""'](?<url>[^""^']+[.]*?)[""'].*?>(?<keywords>[^<]+[.]*?)</a>", RegexOptions.IgnoreCase | RegexOptions.Compiled);
public void ParseHyperlinks(string html)
{
   MatchCollection mcHref = rHref.Matches(html);

   foreach (Match m in mcHref)
      AddKeywordLink(m.Groups["keywords"].Value, m.Groups["url"].Value);
}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться