2011-02-19 34 views
0

對不起,我似乎沒有清楚解釋我的問題。請允許我再次重述我的問題。如何在C#中使用正則表達式提取有用的數據?

  1. 我使用Web客戶端下載整個網頁,我得到的內容作爲一個字符串

    「 ....... ..... VAR picArr =」 /d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4。 PNG | /d/manhua/naruto/516/5.png | /d/manhua/naruto/516/6.png | /d/manhua/naruto/516/7.png |/d /滿華/鳴/ 516/8.png | /d/manhua/naruto/516/9.png | /d/manhua/naruto/516/10.png | /d/manhua/naruto/516/11.png |/d /張曼華/火影忍者/ 516/12.png | /d/manhua/naruto/516/13.png |/d /滿華/ n的aruto/516/14.png | /d/manhua/naruto/516/15.png | /d/manhua/naruto/516/16.png「 ...... 」;

在這個內容

,我想只有一條線是

var picArr ="/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png" 

現在我想用正則表達式來獲得這個字符串,並得到picArr的價值。

我REG exp爲 VAR picArr = 「([。] *)」

我覺得圓點表示的任何字符。但它不起作用。 :(

任何想法?

非常感謝

+2

「picArr的價值」? *值*與您定義的完全相同,沒有什麼可以「提取」。你的意思是你想要文件名嗎? `。`的意思是任何字符(除了換行符),但只有當它不在字符類中。搜索`。*`會返回字符串本身,這是非常沒有意義的。你有沒有想過這個? – mpen 2011-02-19 04:14:46

+0

@馬克,嗨馬克感謝使我的問題美麗:),我不明白你的觀點。我的問題是這個picArr在網頁上,它不是我的變量。所以在我檢索了這個頁面的內容之後,我想得到一行這樣的內容。 – Franva 2011-02-19 04:22:15

+0

Franva:哦......整個事情,``var picArr = ...「在源代碼中的某處?我以爲那是你的代碼。在那種情況下......有十億種方法可以做到這一點。 ``/ dmanhua'`部分是否改變過? `var`部分是否改變過?沒有更多的上下文,我們不知道表達式需要多少或多麼「確切」。 – mpen 2011-02-19 04:27:54

回答

1
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Text.RegularExpressions; 

namespace ExtractFileNames 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string pageData = @"blah blah 
var picArr =""/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png"" 
more blah decimal blah"; 

      var match = Regex.Match(pageData, @"var\s+picArr\s*=\s*""(.*?)"""); 
      var str = match.Groups[1].Value; 
      var files = str.Split('|'); 
      foreach(var f in files) 
      { 
       Console.WriteLine(f); 
      } 
      Console.ReadLine(); 

     } 
    } 
} 

輸出:

/d/manhua/naruto/516/1.png 
/d/manhua/naruto/516/2.png 
/d/manhua/naruto/516/3.png 
/d/manhua/naruto/516/4.png 
/d/manhua/naruto/516/5.png 
/d/manhua/naruto/516/6.png 
/d/manhua/naruto/516/7.png 
/d/manhua/naruto/516/8.png 
/d/manhua/naruto/516/9.png 
/d/manhua/naruto/516/10.png 
/d/manhua/naruto/516/11.png 
/d/manhua/naruto/516/12.png 
/d/manhua/naruto/516/13.png 
/d/manhua/naruto/516/14.png 
/d/manhua/naruto/516/15.png 
/d/manhua/naruto/516/16.png 
2
/picArr =\"([^\"]+)\"/ 

如果我得到這個權利就是你所需要的。

0

如果你只是想獲得的文件名,你可以只是做在管道上的分裂:

 var picArr = "/d/manhua/naruto/516/1.png|/d/manhua/naruto/516/2.png|/d/manhua/naruto/516/3.png|/d/manhua/naruto/516/4.png|/d/manhua/naruto/516/5.png|/d/manhua/naruto/516/6.png|/d/manhua/naruto/516/7.png|/d/manhua/naruto/516/8.png|/d/manhua/naruto/516/9.png|/d/manhua/naruto/516/10.png|/d/manhua/naruto/516/11.png|/d/manhua/naruto/516/12.png|/d/manhua/naruto/516/13.png|/d/manhua/naruto/516/14.png|/d/manhua/naruto/516/15.png|/d/manhua/naruto/516/16.png"; 

     var splitPics = picArr.Split('|'); 

     foreach (var pic in splitPics) 
     { 
      Console.WriteLine(pic); 
     } 
0

它看起來像你想在你的snipp中的字符串文字的值et,「/d/manhua/naruto/516/1.png | ...」

擺脫方括號。 「」與任何字符匹配,不需要括號。方括號用於匹配有限的一組字符:例如,您可以使用「[abc]」來匹配任何「a」,「b」或「c」。

它看起來像括號有逃避「。」,我不知道的一個功能(或在奧陶紀有時忘記)的功能。但是,我測試了正則表達式,因爲您已將字符串值替換爲一系列點,並且正則表達式匹配。它被視爲字面上的「。」字符,你會更可能嘗試匹配反斜槓轉義:「\」。

所以只是擺脫括號,它應該工作。它適用於VS2008。