0

我有一个 HTML 源作为输入,想知道网站是用什么 CMS 制作的。许多 CMS 将他们的名字留在元标记中,如下所示:

<meta name="Generator" content="MY CMS" />   

我可以得到这样的结果:

        Match match = Regex.Match(html, ".*(?i)meta.*generator.*");
        match = Regex.Match(match.ToString(), "content.*\".*\"");
        match = Regex.Match(match.ToString(), "\".*\"");

给我“我的 CMS”

但是有没有办法将它缩短为一个 Regex.Match?

请注意,元标记可能是这样的:

<meta content="MY CMS" name="Generator" />

谢谢和最好的问候

4

3 回答 3

1
var regex = new Regex(@"<meta\s+name=""Generator""\s+content=""([^""]+)""", RegexOptions.IgnoreCase);
var match = regex.Match(html);
var generator = match.Groups[1].Value;
于 2012-11-24T17:36:45.657 回答
1

尝试以下操作:

Regex regex = new Regex(@"<meta[^>]+content\s*=\s*['"]([^'"]+)['"][^>]*>");
Match match = regex.Match(input);

该值在第 1 组中。

希望能帮助到你。

于 2012-11-24T17:37:00.417 回答
1

正则表达式不是解析 HTML 文件的好选择。

HTML 并不严格,其格式也不规则。

使用htmlagilitypack

正则表达式用于则表达式而不是不规则表达式

您可以使用此代码来检索它HtmlAgilityPack

HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

var content= doc.DocumentNode
                .SelectSingleNode("//meta[@name='Generator']")
                .Attributes["content"].Value;
于 2012-11-24T17:54:44.670 回答