2012-11-24 38 views
0

我有一個HTML源代碼作爲輸入,並想知道CMS的網站是由 許多CMS留下自己的姓名在meta標籤是這樣的:正則表達式匹配和子串在一個?

<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標記可能是這樣的:

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

感謝和問候

+3

或者你可以使用了合適的工具:http://htmlagilitypack.codeplex.com/ – TrueWill

+0

避免'regex' ...使用HTML解析器像htmlagilitypack – Anirudha

回答

1

嘗試以下操作:

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

值是在組1.

H操作它有幫助。

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

正則表達式是不解析HTML文件的一個不錯的選擇..

HTML不嚴格,也不是經常用它的格式..

使用htmlagilitypack

正則表達式是用於定期表達NOT 不規則表達式

您可以使用此代碼檢索它使用HtmlAgilityPack

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

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