Подтвердить что ты не робот

Регулярное выражение для получения SRC изображений в С#

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

У меня есть строка, которая содержит простой HTML-код, некоторый текст и изображение. Мне нужно получить значение атрибута src из этой строки. Мне удалось полностью изолировать весь тег до сих пор.

string matchString = Regex.Match(original_text, @"(<img([^>]+)>)").Value;
4b9b3361

Ответ 1

string matchString = Regex.Match(original_text, "<img.+?src=[\"'](.+?)[\"'].*?>", RegexOptions.IgnoreCase).Groups[1].Value;

Ответ 2

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

Это действительно просто использовать, я только что открыл его, и это очень помогло мне, так как я занимался более тяжелым анализом html. Это в основном позволяет использовать XPATHS для получения ваших элементов.

Их примерная страница немного устарела, но API очень легко понять, и если вы немного знакомы с xpaths, вы теперь обходите ее вокруг

Код для вашего запроса будет выглядеть примерно так: (uncompiled code)

 List<string> imgScrs = new List<string>();
 HtmlDocument doc = new HtmlDocument();
 doc.LoadHtml(htmlText);//or doc.Load(htmlFileStream)
 var nodes = doc.DocumentNode.SelectNodes(@"//img[@src]"); s
 foreach (var img in nodes)
 {
    HtmlAttribute att = img["src"];
    imgScrs.Add(att.Value)
 }

Ответ 3

Я попробовал то, что предложил Франсиско Норьега, но похоже, что api для HtmlAgilityPack был изменен. Вот как я это решил:

        List<string> images = new List<string>();
        WebClient client = new WebClient();
        string site = "http://www.mysite.com";
        var htmlText = client.DownloadString(site);

        var htmlDoc = new HtmlDocument()
                    {
                        OptionFixNestedTags = true,
                        OptionAutoCloseOnEnd = true
                    };

        htmlDoc.LoadHtml(htmlText);

        foreach (HtmlNode img in htmlDoc.DocumentNode.SelectNodes("//img"))
        {
            HtmlAttribute att = img.Attributes["src"];
            images.Add(att.Value);
        }

Ответ 4

Регулярное выражение, которое вы хотите, должно быть в строках:

(<img.*?src="([^"])".*?>)

Надеюсь, что это поможет.

Ответ 5

Это должно захватывать все теги img и только часть src независимо от того, где находится (до или после класса и т.д.) и поддерживает html/xhtml: D

<img.+?src="(.+?)".+?/?>

Ответ 6

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

(?<=<img.*?src=")[^"]*

помните, чтобы избежать кавычек при необходимости

Ответ 7

Это то, что я использую, чтобы получить теги из строк:

</? *img[^>]*>

Ответ 8

Вот тот, который я использую:

<img.*?src\s*?=\s*?(?:(['"])(?<src>(?:(?!\1).)*)\1|(?<src>[^\s>]+))[^>]*?>

Хорошая часть состоит в том, что она соответствует любому из ниже:

<img src='test.jpg'>
<img src=test.jpg>
<img src="test.jpg">

И он также может соответствовать некоторым неожиданным сценариям, таким как дополнительные атрибуты, например:

<img src = "test.jpg" width="300">