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 回答