【问题标题】:giving error while counting alt tag using regex ..Only assignment, call使用正则表达式计算 alt 标签时出错..仅赋值,调用
【发布时间】:2015-11-10 20:54:08
【问题描述】:

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

我想使用 c# 计算具有 alt 标签和空 alt 标签的 img 标签

 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

【问题讨论】:

  • 使用MatchCollection ImgAltTag = Regex.Matches(strIn, @"&lt;img\b[^&gt;]*&gt;", RegexOptions.IgnoreCase);。您似乎需要匹配所有 img 标签,而不仅仅是那些具有 alt 属性的标签。
  • 是的,但是,它还应该计算具有空字符串的 img 标签。像 alt=""
  • 我建议使用 HtmlAgilityPack(HTML 解析器)解决方案。你怎么看?如果你打算使用正则表达式来完成这项任务,你很快就会再次回到这里(这已经是你关于同一主题的第三个问题了——你不厌倦吗?)

标签: c# regex


【解决方案1】:

不要为此使用正则表达式。使用 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();

        }
    }
}
​

【讨论】:

  • 但我没有 xmldocumnt,我有 html 响应。我存储在流阅读器中
  • 此外,它是 HTML,而不是 XML。 &lt;img&gt; 标签通常不会自动关闭。
  • 如何加双引号?
  • 然后使用 GetElementsByTagName() 方法。见发帖stackoverflow.com/questions/4842038/…
【解决方案2】:

如果您需要使用 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;
}

结果是1

【讨论】:

  • 但我只想反过来。结果应该是 - 3 。因为我想计算没有alt标签的img标签..感谢回复
  • 无 alt img 标签 Xpath:"//img[not(@alt)]".
猜你喜欢
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
相关资源
最近更新 更多