2015-04-16 61 views
0

您好我有很多的HTML文件,我需要從中提取一些信息,例如,提取設備型號,我用下面的正則表達式代碼:淨正則表達式來提取文本

string sFullString = "Device:</span> <span id=\"model-value\" category=\"model\">DXE-9880</span></li>"; 
     string sStart = "category=\"model\">"; 
     string sEnd = "<"; 
     Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @").*(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase); 

     Match match = regex.Match(sFullString); 
     if (match.Success) 
     { 
      Console.WriteLine(match.Value); 
     } 

預期結果爲「DXE-9880」,但始終爲「DXE-9880 </span >」。 爲什麼第二個「<」在型號後面找到,而不是第一個?

回答

1

您只需將中間.*設置爲.*?,因爲.*是貪婪的,它儘可能匹配所有字符。

Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @").*?(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase); 

OR

使用否定的字符類。

Regex regex = new Regex("(?<=" + Regex.Escape(sStart) + @")[^<>]*(?=" + Regex.Escape(sEnd) + @")", RegexOptions.IgnoreCase); 

[^<>]*匹配任何字符,但不是<>,零次或多次。