3

html の特定のテキストの間の値を取得しようとしていますが、これまでのところ成功していません。

public static string[] split_comments(string html)
    {
        html = html.ToLower();


        html = html.Replace(@""""," ");

htmlの実際の行はこれです

///<meta itemprop="rating" content="4.7"> the 4.7 value changes every time and I need to get this value

Match match = Regex.Match(html, @"<meta itemprop=rating content=([A-Za-z0-9\-]+)\>$");
            if (match.Success)
            {
                // Finally, we get the Group value and display it.
                string key = match.Groups[1].Value;
            }

だから私は html のタグを取得しようとしています。そのタグで、常に変数であるデータを取得したいと考えています。

4

5 に答える 5

4
string html = "<meta itemprop=\"rating\" content=\"4.7\">";
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
var content = doc.DocumentNode
                .Element("meta")
                .Attributes["content"].Value;

- 編集 -

最初に答えを受け入れてから受け入れないことから、コードを取得して実際のhtmlで実行し、間違った結果が返されたことがわかったと思います。

これは、投稿したスニペットで正しく機能するため、答えが正しくないことを示しているわけではありません。

metaしたがって、ワイルドな推測を行い、実際の html に次のitempropような属性を持つ他のタグがあると想定することによって

<meta itemprop="rating" content="4.7">
<meta itemprop="somekey" content="somevalue">

コードは次のようになります。

var content = doc.DocumentNode
                .Descendants("meta")
                .Where(n => n.Attributes["itemprop"] != null && n.Attributes["itemprop"].Value == "rating")
                .Select(n => n.Attributes["content"].Value)
                .First();
于 2012-04-10T07:17:41.233 に答える
2

まず、それを置き換える必要があります:

html = html.Replace(@""""," ");

それと:

html = html.Replace(@"""","");

正規表現を次のように変更します。

Match match = Regex.Match(html, @"<meta itemprop=rating content=([A-Za-z0-9\-.]+)\>$");

そうしないと、if は常に false になります。その後、単に部分文字列を使用できます:

 html = html.Substring(html.IndexOf("content=") + 8);

 html = html.Substring(0, html.Length - 1);

それが役立つことを願っています

于 2012-04-10T07:16:02.783 に答える
1

ここ

html = html.Replace(@""""," "); 

二重引用符をスペースに置き換えます。したがって、サンプル文字列は次のようになります。

<meta itemprop= rating  content= 4.7 > 

ただし、正規表現は、これらの余分なスペースのないテキストに一致します。また、正規表現では、終了の前にバックスラッシュが必要>ですが、これは例にはありません。

于 2012-04-10T07:06:17.530 に答える
1

正規表現は次のようになり@"\<meta.+?content\=\"(.+)\"\>"ます。正規表現で HTLM を解析するのは悪いことですが。

于 2012-04-10T07:08:16.157 に答える
1

これを試して:

        double searchedValue;
        Regex reg = new Regex(@"content= (?<groupname>.*?) >");
        var matches = reg.Match(@"<meta itemprop= rating  content= 4.7 >");
        var value = matches.Groups["groupname"].Value;
        //maybe you need to replace like value.Replace('.',',')
        double.TryParse(value , out searchedValue);

(?<groupname> ... )グループを設定します。で値にアクセスできますmatches.Groups["groupname"].Value

.*? " " の次の一致まで読み込んでい>ます。

" " を使用しない場合、テキスト内?で " " の最後の一致が検索さ>れます。

頑張ってください=)

于 2012-04-10T07:28:00.450 に答える