Регулярное выражение для удаления ссылки с изображения в HTML - PullRequest
1 голос
/ 07 марта 2012

Каков будет синтаксис C # / regex для удаления ссылки с первого изображения в тексте, например:

text
<a href="..." class="..."><img src="..." class="..." width="..." /></a>
more text
<a href="..." class="..."><img src="..." class="..." width="..." /></a>
even more text

Так что конечный результат будет:

text
<img src="..." class="..." width="..." />
more text
<a href="..." class="..."><img src="..." class="..." width="..." /></a>
even more text

Любой совет будет принята с благодарностью! Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 07 марта 2012

Сделайте себе одолжение и используйте что-то вроде HTML Agility Pack . Как мы упоминали в комментариях, регулярные выражения и HTML приводят только к слезам.

1 голос
/ 08 марта 2012

Используя HTML Agility Pack ( страница проекта , nuget ), это помогает:

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml("text <a href=\"...\" class=\"...\"><img src=\"...\" class=\"...\" width=\"...\" /></a> more text"
     +" <a href=\"...\" class=\"...\"><img src=\"...\" class=\"...\" width=\"...\" /></a> even more text\"");

var firstImage = doc.DocumentNode.Descendants("img").Where(node => node.ParentNode.Name == "a").FirstOrDefault();

if (firstImage != null)
{
    var aNode = firstImage.ParentNode;
    aNode.RemoveChild(firstImage);
    aNode.ParentNode.ReplaceChild(firstImage, aNode);
}

var fixedText = doc.DocumentNode.OuterHtml;
//doc.Save(/* stream */);

Лично мне это гораздо прощеглаза, так как в нем четко указано, чего вы пытаетесь достичь.

  1. Найдите первое IMG внутри тега A
  2. Временно сохраните IMG
  3. Remove Swap the IMGи тег A
  4. Сохраните результаты.
0 голосов
/ 07 марта 2012

Попробуйте это

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