【问题标题】:Problem with c# regular expression for extracting meta tags用于提取元标记的c#正则表达式问题
【发布时间】:2009-04-28 17:31:48
【问题描述】:

我有这个从 HTML 文档中提取元标记的正则表达式,但是当我将它合并到我的 Web 应用程序中时它给了我错误。

表达式是

@"<meta[\\s]+[^>]*?name[\\s]?=[\\s\"\']+(.*?)[\\s\"\']+content[\\s]?=[\\s\"\']+(.*?)[\"\']+.*?>" ;

有什么问题吗?

【问题讨论】:

  • 正则表达式看起来有效。如果您发布一些引发错误的示例代码会有所帮助。
  • 如果您真正说明正则表达式给您的错误,那就太好了。并且可能是一个更大的代码示例,其中出现错误的行。
  • 正则表达式还将解析无效输入(例如,如

标签: .net regex


【解决方案1】:

您在发布的示例中同时使用了@(逐字字符串)语法并转义了斜杠。您需要删除@,或者删除多余的斜杠并通过将它们加倍来转义双引号,然后它应该可以工作。

(无论如何,如果您要持续使用正则表达式,我建议您购买一份RegExBuddy。)

【讨论】:

  • 它们被称为“逐字字符串”。 RegexBuddy 的好处之一是,在帮助您创建正确的正则表达式之后,它可以以您需要的任何格式导出正则表达式,包括 C# 逐字字符串。
【解决方案2】:

当使用字符串字面量 (@"") 时,您不需要将反斜杠加倍 - 字符串中的所有内容都按原样接受 - 除了需要加倍的双引号:

@"&lt;meta[\s]+[^&gt;]*?name[\s]?=[\s""']+(.*?)[\s""']+content[\s]?=[\s""']+(.*?)[""']+.*?&gt;"

【讨论】:

    【解决方案3】:

    杰罗米是对的。您正在使用转义字符串和字符串文字。正则表达式本身很好......所以我想这就是问题所在。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多