Regex для получения значений атрибута тега HTML

У меня есть следующая строка с <img src="some value" шаблон является фиксированным, т.е.

  • Начинается с <img
  • Там будет один пробел
  • затем src=
  • некоторые символы в двойных кавычках

Таким образом, я хочу получить значение в двойных кавычках, которые доступны в шаблоне, упомянутом выше. Я не хочу разбирать весь HTML.


<p>
   <img src="http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpg" style="width: 25%;">
   <img src="http://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg" style="width: 25%; float: none;" class="img-thumbnail">sdklfnlkasndfknasd
   <img src="415b4579babd4f288ae84c372cd1669e.jpg" style="width: 25%;">f
</p>
<p>adsffasd</p>
<p>ff</p>
<p><br></p>
<p><br></p>
<p>adsadf</p>
<p>s</p>

Я хочу получить все значения из src атрибут только тегов img. src Тег может иметь любое значение, не обязательно быть URL. Это может быть просто имя файла. Результат матчей должен быть:

http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpghttp://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg415b4579babd4f288ae84c372cd1669e.jpg

Я пробовал следующий код:

string regex = "<img src=([\"'])(?:(?=(\\\\?))\\2.)*?\\1";
string html = File.ReadAllText(@"data.txt");
var hrefmatches = Regex.Matches(html, regex);

И результат:

<img src="http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpg"<img src="http://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg"<img src="415b4579babd4f288ae84c372cd1669e.jpg"

но я не <img src=" & " участие в результатах

2 ответа

Решение

Если вы используете C#, правильный способ сделать это - использовать анализатор HTML (например, пакет agility HTML) для анализа вашего HTML. Парсинг HTML с помощью REGEX сложен, подвержен ошибкам, и если вы подпишетесь на групповое мышление в Stackru, то демоны выйдут из ада.

Узнайте больше: http://www.mikesdotnetting.com/article/273/using-the-htmlagilitypack-to-parse-html-in-asp-net

Самое простое решение, учитывая ваш точный вклад в вопрос, - это просто полностью игнорировать тот факт, что html участвует каким-либо образом, и просто искать что-либо, а затем буквальное src=" и затем любой символ не кавычка внутри, а затем буквальная кавычка, а затем любая последующая вещь.

используя только ваш пример выше, это супер наивное регулярное выражение должно работать:

string regex = ".*src="([^"]*)".*";

но для чего-то более сложного вы должны использовать html-парсер.

Другие вопросы по тегам