2011-02-19 12 views
0

申し訳ありませんが、私は明らかに私の質問を説明していないようです。私の質問をもう一度言い換えてください。C#で正規表現で有用なデータを抽出するには?

  1. 私は、全体のWebページをダウンロードするために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/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/n aruto/516/14.png | /d/manhua/naruto/516/15.png | /d/manhua/naruto/516/16.png " ...... ";このコンテンツでは

、私は今、私はこの文字列を取得し、picArrの値を取得するには、正規表現を使用したい

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" 

で一つだけの行を取得したいです。

私にreg expは のvar picArr =である "([。] *)"

私はドットが任意の文字を意味だと思います。しかし、それは動作しません。 :(

任意のアイデア?

どうもありがとう

+2

"picArrの値は"? *値*はあなたが定義した通りです。 "抽出"するものはありません。ファイル名が必要なのですか? '。'は文字クラス(改行を除く)を意味しますが、文字クラスに含まれていない場合に限ります。 '。* 'を検索すると文字列自体が返されますが、それはかなり無意味です。あなたはこれに何か考えを与えましたか? – mpen

+0

@マーク、こんにちはマーク私の質問を美しくするおかげで:)、私はあなたのポイントを取得しません。私の質問は、このpicArrはウェブページ上にある、それは私の変数ではありません。ですから、このページの内容を検索した後、私が得たいと思うこのような行が1つあります。 – Franva

+0

Franva:ああ...そのすべてが、 "" var picArr = ... "はソースコードのどこかにありますか?私はあなたのコードだと思った。その場合、それを行うには十億の方法があります。 ''/dmanhua ''の部分はこれまでどおり変更されていますか? 'var'の部分はこれまで変わっていますか?より多くの文脈がなければ、表現がどれだけ正確である必要があるかわかりません。 – mpen

答えて

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 
+0

ありがとうございました、あなたのコードは私のために完璧に動作します^ _ ^私は非常にあなたのコードと時間を感謝しています^ _^ – Franva

+0

もう1つの質問。私の正規表現を説明していただけますか? "なぜダブル" "を使用したのか、あなたが使用した角かっこの中になぜ*?それらの意味は何ですか? – Franva

+0

私は削除しようとした?それでも同じ答えが得られました。どうして? – Franva

2
/picArr =\"([^\"]+)\"/ 

私はあなたが必要なものです。この権利を得た場合。

+0

あなたはC#で始まりと終わりに '/'を置かないでしょう。そして実際にコードでこれを定義するのではなく、あなたは本当に引用符をエスケープする必要はありません。 – mpen

+0

[OK]を、アドバイスのおかげで、私は "="の後ろに空白を入れていないため、ターゲット文字列には何もありません。 – Delta

+0

ちょうど気づいた。私の悪い;)とにかく私はあなたを+1しました。 – mpen

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

あなたのスニペットに文字列リテラルの値が必要なようですet、 "/d/manhua/naruto/516/1.png | ..."

角括弧を削除します。 ""角カッコを使わずにそのまま文字をマッチさせます。角括弧は、限られた文字セットを照合するためのものです。たとえば、 "[abc]"を使用して "a"、 "b"、または "c"と一致させます。

括弧は、私が知らなかった(または忘れた)機能である "。"をエスケープする効果があるようです。しかし、文字列の値を一連の点で置き換えて正規表現をテストしたところ、正規表現はマッチしました。それはリテラルとして扱われています。 "あなたは、バックスラッシュのエスケープと一致する可能性が高いでしょう: "\。"

括弧を取り除くだけでうまくいくはずです。それは私のためにVS2008で動作します。

関連する問題