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