【问题标题】:How to count img tags which has no alt tags by using regex如何使用正则表达式计算没有 alt 标签的 img 标签
【发布时间】:2015-11-04 12:40:00
【问题描述】:

如何使用正则表达式计算img标签中有没有alt标签?

 MatchCollection AltTag = Regex.Matches(
     strIn,
     "<img .*? />", 
     RegexOptions.IgnoreCase | RegexOptions.Multiline
 );
 lblImgTags.Text = "We found " + AltTag.Count.ToString() + " images on this website ";

我正在计算 img 这样的标签,但我如何计算没有 alt 标签的 img 标签?

【问题讨论】:

  • Regex 是您最不想为此使用的东西。为什么不使用 jQuery 并将字符串作为 DOM 读取?
  • 这可能是相关的:stackoverflow.com/questions/1732348/… regex is not great in parsing html
  • @OliverRadini 我正在寻找但找不到它:D
  • 哈哈它看起来很经典
  • 你为什么要标记jquery?您不能在 C# 代码中使用 jQuery,而且您的示例很明显是 C# 代码。为什么要标记javascript?我已经为你删除了不相关的标签。

标签: c# asp.net regex


【解决方案1】:

如何使用正则表达式计算没有alt标签的img标签

你不能。你cannot use regular expressions to parse HTML。你可能认为你有一个足够包含的用例。我也是。我错了,恕我直言,你也是。

使用 HTML 解析器来解析 HTML。有几个,比如 NSoup,它是优秀的 Java JSoup 库的 .Net 端口。但这只是众多选择中的一种。

【讨论】:

  • 不错。每个人都发布这个,但也有 an answer 这个帖子进入理论。 cmets非常有趣。目前:我不确定是否无法使用正则表达式解析 HTML。也许:这很痛苦 - 但有可能。
  • @Verarind:不,这是不可能的(只需一个正则表达式)。正则表达式可以在解析 HTML 中发挥 part 的作用,但不能解析它。 HTML 是一种非常规语言。好的链接,顺便说一句。
  • 正如我所说:我不确定。但是有一条评论说 perl 正则表达式引擎正在完成 - 这可能足以解析 HTML。问题是关于 C# 正则表达式引擎。也许它也有足够的能力来解析 HTML——我不知道。我不会使用 Regex 来解析 HTML,但听起来有些引擎能够做到这一点。
  • @Verarind:好吧,如果你愿意,你可以怀疑它,但这就像怀疑地球是一个扁球体一样。 :-) 甚至不是 Perl,当然不是 C#。为什么?尤其是因为 HTML 有各种特殊情况规则。如果您对此表示怀疑,请read all about it。一个真正智能的引擎可能会让你达到 90%,但 10% 已经很多了。重新 Perl 和图灵完成,see this answer.
【解决方案2】:
^(?=.*<img)(?!.*alt).*

应该是正则表达式

【讨论】:

【解决方案3】:

要计算,请尝试使用前瞻。 regex101 demo

<img\s(?![^>]*\balt\s*=)

或者匹配标签要贵一点。 regex101 demo

<img\s(?:(?!\balt\s*=)[^>])+>

和你的RegexOptions.IgnoreCase一起

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-21
  • 2014-01-03
  • 1970-01-01
  • 2013-09-10
  • 2015-11-07
  • 1970-01-01
相关资源
最近更新 更多