2014-12-03 66 views
-1

所以我正在使用c#win表單程序,並且我需要它使用Regex.Match方法來顯示頁面上寫的某些內容。Regex.Match問題c#

HTML網站

<pre id="code" class="brush: text; plain-text">1</pre> 

什麼,我已經試過

if (WebBrowserReadyState.Complete == webBrowser1.ReadyState) 
     { 
      if (webBrowser1.DocumentText.Contains("brush: text; plain-text")) 
      { 
       Match match1 = Regex.Match("class=\"brush: text; plain-text\">(.*?)<", webBrowser1.DocumentText.Replace("\r", "").Replace("\n", "")); 
       if (match1.Success) 
       { 
        String pointsStr = match1.Result("$1").ToString(); 
        label7.Text = pointsStr; 
       } 
      } 
     } 

鏈接到HTML頁面:https://www.dropbox.com/s/6te2udjz14tutpt/Verison.txt?dl=0

基本上我需要它Label7.Text顯示1這是後完全加載網頁。

+0

http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags閱讀本文! – mybirthname 2014-12-03 01:05:28

+0

所有人都尊重,在這之前我已經完成了這個方法,我不認爲那個人完全理智。 – Programerszz 2014-12-03 01:09:05

+2

**不要這樣做**。而是使用HTML Agility Pack。 – SLaks 2014-12-03 01:10:52

回答

0

獲取Dropbox文件內部文本的一種方法是將「www.dropbox.com」更改爲「dl.dropboxusercontent.com」並下載該文件。因此,我所做的是:

var wc = new WebClient {Proxy = null}; 
var url = "https://www.dropbox.com/s/6te2udjz14tutpt/Verison.txt?dl=0" 
    .Replace("www.dropbox.com", "dl.dropboxusercontent.com"); 
Label7.Text = await wc.DownloadStringTaskAsync(url); 
+0

有錯誤sayingError 'await'操作符只能在異步方法中使用。考慮使用「異步」修飾符標記此方法,並將其返回類型更改爲「任務」。 – Programerszz 2014-12-03 04:03:04

+0

在你的方法中只需添加'異步'修飾符。因此,如果你的當前方法看起來像這樣的'公共無效GetVersion()'改變它這個'公共異步無效GetVersion()' – 2014-12-03 04:21:20

+0

另外,由於下載是如此之小,您可以刪除await關鍵字並將'DownloadStringTaskAsync'改爲'DownloadString '@Programerszz – 2014-12-03 14:48:45

0

您可以給正則表達式專有名稱,然後通過名稱引用它們。例如,我將元素內容命名爲desired。然後使用Math.Groups[groupName].Value獲得匹配的值,如:

Match match1 = Regex.Match("class=\"brush: text; plain-text\">(?<desired>.*?)<", webBrowser1.DocumentText.Replace("\r", "").Replace("\n", "")); 
if (match1.Success) 
{ 
    String pointsStr = match1.Groups["desired"].Value; 
    label7.Text = pointsStr; 
} 

而且這是一個好主意,逃出尖括號,並把你的模式的@引號字符串中,雖然看上去上面的正常工作:

@"class=\""brush: text; plain-text\""\>(?<desired>.*?)\<" 

是的,正如你在評論中看到的那樣,只對正則語言使用正則表達式。 HTML不是一種常規語言,因此您最好使用其他適當的工具,例如HTML敏捷包來實現此目的。

+0

沒有在我的代碼中工作.... – Programerszz 2014-12-03 02:22:47

0

一個更簡單的實現這一點幾乎可以肯定,像這樣直接元素訪問(未經測試),以取代正則表達式的工作方式:

if (WebBrowserReadyState.Complete == webBrowser1.ReadyState) { 
    var elemCode = webBrowser1.Document.GetElementById("code"); 
    if (null != elemCode) { 
    label7.Text = elemCode.InnerText; 
    } 
} 

這可能更快,也顯着更強勁。

+0

沒有工作.... – Programerszz 2014-12-03 04:01:34

+0

其實它的工作,但它並沒有顯示任何label7文本它改變了文本,但它改變了它什麼都沒有。 – Programerszz 2014-12-03 04:05:17

+0

檢查以瞭解您何時運行此代碼;最初我的測試因爲某種原因嘗試使用Navigated事件,但DocumentCompleted的工作更好。 (你可能不需要ReadyState測試了。) – 2014-12-03 09:13:24