0

ユーザー名に関連付けられた番号を取得しようとしています。各ユーザー名の横には特定の値があります。

プライベートボイドクエリユーザー(){

        string browserText = webBrowser1.DocumentText;
        Match match = Regex.Match(browserText, "(>pickles</a></td><td>).*(</td><td align=\"center\">)");

        string id = match.ToString();
        string clean_id = Regex.Replace(id, @"\D", "");
        textBox1.AppendText(clean_id);

    }

検索しているドキュメントは次の形式です...

<tr><td>17.</td><td>ab</td><td><a href="http://www.*****.com/s.php?id=500000">pickles</a></td><td>150,000</td><td align="center"></td></tr>

<tr><td>18.</td><td>cd</td><td><a href="http://www.*****.com/s.php?id=7245658">donuts</a></td><td>250</td><td align="center"></td></tr>

結果は「150000」になると思っていました。ただし、そうではありません。150000 から始まる膨大な数を作成し、その後、他のすべての数を結合します。

私は正規表現にかなり慣れていませんが、同様のソリューションが他の場所で機能しました。私は単純なことを見落としていますか、それともこれについてもっと良い方法がありますか?

4

1 に答える 1

0

.* は貪欲で、すべての文字に一致するため、一致は巨大な複数行の一致になります。数値は、「0 から数百万の任意の文字」ではなく、「数字、コンマ、数字」として記述する必要があります。

だから代わりに

.*

使用する

([0-9]+,)?[0-9]+

か何か。

または、ある種の否定的な先読みを使用して、誤って <. また、ソース マテリアルが有効な xml または html である場合は、xml または html パーサーを使用して解析します。

于 2013-02-26T09:27:24.970 に答える