Вопрос по regex, c#, html – Regex для получения значения src из тега img

2

Я использую следующее регулярное выражение, чтобы получитьsrc значение первогоimg тег в документе HTML.

string match = "src=(?:\"|\')?(?<imgSrc>[^>]*[^/].(?:jpg|png))(?:\"|\')?"

Теперь он захватывает всегоsrc атрибут, который мне не нужен. Мне просто нужен URL внутриsrc приписывать. Как это сделать?

Ваш Ответ

3   ответа
1

любому символу после кавычки, который не является кавычкой внутри тега в атрибуте src.

В регулярных выражениях Perl это было бы так:

/src=[\"\']([^\"\']+)/

URL будет в$1 после запуска этого.

Конечно, это предполагает, что URL-адреса в ваших атрибутах src заключены в кавычки. Вы можете изменить значения в[] скобки соответственно, если они не.

Работал красиво для меня. Моим требованием было просто извлечь подстроку, используя очень специфический шаблон. Тот факт, что исходная строка является HTML, не имеет значения. Я не пытаюсь анализировать HTML, и я согласен с вышеприведенным комментарием, что создание полного HTML-парсера для выполнения этой простой задачи является излишним.
4

Когда не использовать Regex в C # (или Java, C ++ и т. Д.) а такжеИщу C # HTML парсер

PS, как я могу поставить ссылку на вопрос StackOverflow в комментарии?

Просто отправьте URL, у вас есть 600 символов для комментирования.
6

Parse your HTML with something else. HTML не обычный и, таким образом, регулярные выражения вообще не подходят для его анализа.

Используйте HTML-анализатор или XML-анализатор, если HTML строгий. Намного проще получить значение атрибута src с помощью XPath:

//img/@src

Синтаксический анализ XML встроен вSystem.Xml namespace, Это невероятно мощно.HTML-разбор немного сложнее, если HTML не строгий, но есть много библиотек, которые сделают это за вас.

@Welbog - если ему нужно только получить значение img src, я с этим не согласен. Использование HTML-парсера для такой задачи является излишним. Если ему нужно сделать что-то особенно сложное, я бы с большей вероятностью согласился.
@eqbridges: Вы называете это излишним, я называю это простотой. & Quot; // IMG / @ SRC & Quot; гораздо проще, удобочитаемее и удобнее в обслуживании, чем & quot; src = (?: \ & quot; | \ ';)? (? & lt; imgSrc & gt; [^ & gt;] * [^ /]. (?: jpg | png)) ( ?: \ & quot; | \ 'a); & quot; и, прежде всего, это действительно правильно.
@ eqbridges: тот факт, что регулярное выражение, которое он придумал, настолько сложен, указывает на то, что это неправильный способ решения проблемы. Затем существует тот факт, что он не соответствует всем возможным значениям для атрибутов src (то есть тех, которые содержат «или»). Не разбирайте HTML / XML таким образом! Просто не делай этого!
он не хочет анализировать html, а просто извлечь значение из тега одного типа в html. Регексы преуспевают в таких вещах.
@Jeff Davis: XPath, XQuery и XSL связаны с XML и не связаны с другими языками программирования.

Похожие вопросы