2011-07-24 11 views
0

C#を使用してHTML応答ページからいくつかのタグの間でテキストを抽出しようとしています。私の正規表現が機能しない

<input type="hidden" name="79bddb76e349d12a5be85c0d183923f7" value="1" /> 

値79bddb76e349d12a5be85c0d183923f7が必要です。この値だけが変わり、パート値= 1は毎回同じです。また、この前に2つの他の隠しフィールドがあることにも注意してください:

<input type="hidden" name="test" value="example" /> 

<input type="hidden" name="task" value="login" /> 

私はmatchcollectionsを使用する必要がありますか?正規表現は何になりますか?

ありがとうございました。

+2

あなたはどのような正規表現を試してみましたか? – Mat

+0

単純な正規表現マッチで始まり、さらに多くの部分を追加しようとします。あなたは初心者の方なら、おそらく1回の実行で正規表現全体を書くことはできません。 –

答えて

4

あなたはXHTMLに文書を解析してみてください、そして、あなたが必要な情報を抽出するためのXPathを使用することができます。一般的に

name="([^"]+)" value="1" 
+0

新しいRegex( "\" name = \ "([^ \"] +)\ "value = \" 1 \ ""); –

+0

新しいRegex( "\" name = \ "([^ \"] +)\ "value = \" 1 \ "");動作しません –

+0

@JG動作しませんでした –

0

:正規表現で

//input[@value = '1']/name 

を、あなたはこれらの線に沿って何かを使用することができます正規表現を使用してHTMLを解析すると脆弱になる可能性があるため、XHTMLとしてドキュメントを解析する方がHTMLで正規表現を直接使用するよりも優先されます。しかし、あなたは正規表現を使用したい場合は、このようなものはおそらく動作します:ドライバーとして

IEnumerable<string> GetNamesInHtml(string html) 
{ 
    const string pattern = @"<input type=\""hidden\"" " 
      + @"name=\""([0-9a-f]{32})\"" value=\""1\"" />"; 
    return Regex.Matches(html, pattern) 
     .OfType<Match>() 
     .Select(x => x.Groups[1].Value); 
} 

を:

string input = @"<input type=""hidden"" name=""79bddb76e349d12a5be85c0d183923f7"" value=""1"" /> 
      other html <b>sldkjflsdkjf</b> ipsum 
      <input type=""hidden"" name=""task"" value=""login"" /> 
      <input type=""hidden"" name=""33947f979873987d9879283473a98738"" value=""1"" /> "; 
foreach (string s in GetNamesInHtml(input)) 
    Console.WriteLine(s); 
// prints: 
// 79bddb76e349d12a5be85c0d183923f7 
// 33947f979873987d9879283473a98738 
関連する問題