正则表达式匹配和子串在一个?

时间:2012-11-24 17:31:54

标签: c# regex

我有一个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(), "\".*\"");

给我“MY CMS”

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

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

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

谢谢和最好的问候

3 个答案:

答案 0 :(得分:1)

var regex = new Regex(@"<meta\s+name=""Generator""\s+content=""([^""]+)""", RegexOptions.IgnoreCase);
var match = regex.Match(html);
var generator = match.Groups[1].Value;

答案 1 :(得分:1)

尝试以下方法:

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

该值在第1组中。

希望它有所帮助。

答案 2 :(得分:1)

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

HTML不严格,格式也不规则..

使用htmlagilitypack

正则表达式用于常规表达式NOT 不规则表达式

您可以使用此代码使用HtmlAgilityPack

检索它
HtmlDocument doc = new HtmlDocument();
doc.LoadHtml(html);

var content= doc.DocumentNode
                .SelectSingleNode("//meta[@name='Generator']")
                .Attributes["content"].Value;