Это регулярное выражение должно отсортировать вас, чтобы получить src-содержимое просто тегов IMG:
(?<=<img.*?src=\")[^\"]*(?=\".*?((⁄>)|(>.*<⁄img>)))
Он не зависит от расположения или src внутри тега, он требует, чтобы вы установили чувствительность к регистру на нечувствительность, чтобы быть стабильной.
В версии Patjbs вы получите src всех тегов, что приведет к нестабильности, если вы анализируете html, содержащий ссылки во внешнем контенте - таком как javascript, внешнее содержимое div и т. Д.
string htmlString = @"<img id="tagId" src="myTagSource.gif" name="imageName" />";
string matchString = Regex.Match(htmlString, @"(?<=<img.*?src=\")[^\"]*(?=\".*?((/>)|(>.*</img)))").Value;
matchString теперь равно «myTagSource.gif»
Я заметил, что в вашей входной строке отсутствует символ & (амперсанд) для обозначения escape-символов, таких как quot; не будет никакого способа (не заставляя логику искать quot; lt; gt;), чтобы интерпретировать эти символы программно. Вам нужно будет выполнить замену исходной строки, чтобы преобразовать ее в интерпретируемую строку [это слово?].
Итак, допустим, вы вынули все эти строки со страницы, вам нужно было бы предположить, что все экземпляры lt; стать <и все> стать> всем " стать ".
Вы также не можете предполагать, что предоставленные данные будут всегда возвращаться в этой форме, иногда строка может содержать другую информацию тега (идентификатор, имя, информацию о границе и т. Д.). Поэтому я думаю, что, возможно, наиболее идеологические и наиболее приемлемые решения могут немного отличаться. Наиболее идеальным способом было бы сделать это за один раз, но наиболее удобным для обслуживания может быть сделать это в два этапа: сначала преобразовать входную строку в стандартную строку html, а затем - извлечь исходные данные.
В качестве альтернативы, вы могли бы сделать это за один раз, заменив конструкцию html в моем шаблоне соответствующими заменами символов (при условии, что они используют стандартное кодирование, но отбрасывают амперсанд), хотя это не совсем так. как читабельный и может вызвать путаницу у любого, кто поддерживает код:
(= \ Quot; * ((frasl; GT; (<= л;; IMG <em>SRC = \ Quot?.?).?.?.) | (GØ; * л; frasl; imggt;)))
Редактировать: Если окажется, что они являются с использованием стандартной кодировки, а вы просто не предоставили & в вашем примере, тогда вы можете просто sub в первом шаблоне, который я представил, ссылаясь на декодированный URL, используя:
string MatchValue = Regex.Match(HttpUtility.UrlDecode(inputString), pattern).Value;
Это расшифрует строку, которую вы получили от них, в стандартную строку, заменив экранированные символы правильными символами, а затем запустив тот же шаблон.