使用正则表达式计数alt标记时出错.仅赋值,调用

本文关键字:出错 赋值 调用 正则表达式 alt | 更新日期: 2023-09-27 18:21:24

使用regex计数alt标记时出错-只有赋值、调用、增量、减量和新对象表达式可以用作语句和;预期

我想用c#计算img标签,它有alt标签和空alt标签

 MatchCollection ImgAltTag = Regex.Matches(strIn, "<img[^>]*alt=['"].+['"]", RegexOptions.IgnoreCase | RegexOptions.Multiline);

示例img标签

<img src="alt.png" class="absmiddle" alt="" />
<img src="alt.png" class="absmiddle" />

它应该给出计数2

使用正则表达式计数alt标记时出错.仅赋值,调用

不要为此使用Regex。更容易使用XML Ling

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml =
                "<Root>" +
                "<img src='"alt.png'" class='"absmiddle'" alt='"'" />" +
                "<img src='"alt.png'" class='"absmiddle'" />" +
                "</Root>";
            XElement root = XElement.Parse(xml);
            int count = root.Descendants("img").Where(x => x.Attribute("alt") == null || x.Attribute("alt").Value.Length == 0).Count();
        }
    }
}
​

如果需要使用HTML,请使用HTML解析器。

这是一个基于HtmlAgilityPack的答案。

假设你有:

<img src="alt.png" class="absmiddle" alt="" />
<img src="alt.png" class="absmiddle" />
<img src="ff" />

您需要获得1个img标记,因为它包含alt。您需要一个//img[@alt]的XPath来获取所有这些值,不管它们内部是否有值。也无需担心报价。

public int HtmlAgilityPackGetImgTagsWithAlt(string html)
{
    HtmlAgilityPack.HtmlDocument hap;
    Uri uriResult;
    if (Uri.TryCreate(html, UriKind.Absolute, out uriResult) && uriResult.Scheme == Uri.UriSchemeHttp)
    { // html is a URL 
        var doc = new HtmlAgilityPack.HtmlWeb();
        hap = doc.Load(uriResult.AbsoluteUri);
    }
    else
    { // html is a string
        hap = new HtmlAgilityPack.HtmlDocument();
        hap.LoadHtml(html);
    }
    var nodes = hap.DocumentNode.SelectNodes("//img[@alt]");
    return nodes != null ? nodes.Count : -1;
}

结果是CCD_ 4。