2010-05-04 86 views
0

我想從視圖頁面提取MasterPage值指令。我想要最快的方式來做到這一點,考慮到一個非常大的aspx頁面,以及一個非常小的。使用正則表達式從字符串中提取字符串

我認爲最好的辦法是做有兩個階段:

  1. 提取從視圖頁面指令部分(使用正則表達式):
    <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

  2. 然後,提取值裏面MasterPageFile屬性。

結果需要是:~/Views/Shared/Site.Master

我可以從某人的幫助下實施嗎?我非常想只使用正則表達式,但我不是正則表達式專家。

另一件事,你認爲正則表達式是最快的方法嗎?

回答

1

這裏是相匹配的Page指令,將有1組的MasterPageFile屬性值的正則表達式:

<%@\s?Page.*?MasterPageFile="([^"]+)".*?%>$ 

你爲什麼需要它?如果在運行時顯示頁面時需要了解MasterPageFile,則可以使用更簡單快捷的方式來完成此操作。

+0

我構建了一個自動化測試代碼,用於測試大量視圖頁面。你認爲這是最快的方法嗎?在一個非常大的aspx文件中,正則表達式可能會掃描全部頁面,或者它是否優化爲僅查找第一個匹配的大小寫(在本例中爲頁面指令塊)。謝謝! – stacker 2010-05-04 17:27:00

+0

如果.aspx非常大,您可能只想讀取第一個_n_行,然後在其上運行正則表達式。然後你只有很少的正則表達式可以操作,你將花更少的時間來加載頁面。磁盤IO往往比CPU慢:-) – driis 2010-05-04 17:36:12

+0

Regex.Match方法將返回第一個匹配項,然後停止搜索。 – driis 2010-05-04 17:37:29

1
string a = "<%@ Page Language=\"C#\" MasterPageFile=\"~/Views/Shared/Site.Master\" Inherits=\"System.Web.Mvc.ViewPage\" %>"; 

    Regex r = new Regex("<%@.*MasterPageFile=\"([^\"]*)\".*%>", RegexOptions.Compiled); 
    Match m = r.Match(a); 
    if (m.Success) 
    { 
     // what you want is in m.Groups[1] 
    } 

組是包含匹配部分的字符串數組。組[0]是整個匹配,其餘部分將包含在正則表達式中的括號內。如上所述,我用圓括號包圍了你想要的部分。

+0

搜索需要在頁面指令結束後停止。 – stacker 2010-05-04 17:56:48

+0

謝謝你的幫助! – stacker 2010-05-04 17:57:12

相關問題